【刷题题解】编辑距离

给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数  。

你可以对一个单词进行如下三种操作:

  • 插入一个字符
  • 删除一个字符
  • 替换一个字符

这道题也是,一眼动态规划,乍一看感觉很复杂,仔细思考一下还是觉得很复杂。

这道题的dp【i】【j】含义我们设定为:word1的前 i 字符串转变为word2的前 j 字符串所需要进行的最小操作数。

word1word2中的一个为空时,即从空字符串变成另一个字符串或者从一个字符串变为空,转换所需的操作数即为另一个单词的长度。

逐一遍历word1的每个字符上遍历word2的每个字符。

当word【i】=word【j】时,无需做改变。

当word【i】!=word【j】时,我们有三种操作选择,增加/删除/替换;这三种情况对应着不同的前置情况。

我们用代码来实现思路:

对于两个单词word1word2,设dp[i][j]表示word1的前i个字符转换成word2的前j个字符所使用的最少操作数。我们想要计算的最终结果是dp[m][n],其中mn分别是word1word2的长度。

  • 初始化:当word1word2中的一个为空时,转换所需的操作数即为另一个单词的长度。因此,dp[i][0] = i0<=i<=m)和dp[0][j] = j0<=j<=n)。

  • 状态转移方程

    • 如果word1[i-1] == word2[j-1](注意dp数组的下标从1开始计数,而字符串的下标从0开始),则dp[i][j] = dp[i-1][j-1],因为最后一个字符相同,不需要额外操作。
    • 如果word1[i-1] != word2[j-1],则需要考虑三种操作:
      • 插入:dp[i][j-1] + 1
      • 删除:dp[i-1][j] + 1
      • 替换:dp[i-1][j-1] + 1
    • 取这三种操作的最小值作为dp[i][j]
var minDistance = function(word1, word2) {const l1=word1.length;const l2=word2.length;const dp=new Array(l1+1).fill(0).map(()=>new Array(l2+1).fill(0))for(var i=1;i<=l1;i++)dp[i][0]=dp[i-1][0]+1;//初始化遍历各种长度的word1变成空字符串的步数(只能靠不断删除)for(var i=1;i<=l2;i++)dp[0][i]=dp[0][i-1]+1;//初始化遍历空字符串长度的word1变成word2的各种长度需要的部署(只能靠不断插入)//填表for(var i=1;i<=l1;i++){for(var j=1;j<=l2;j++){if(word1[i-1]==word2[j-1]){dp[i][j]=dp[i-1][j-1];//相等时无需变化}else{dp[i][j]=Math.min(dp[i-1][j-1],dp[i][j-1],dp[i-1][j])+1;//选择使用三种操作最终最少操作数的一种}}}return dp[l1][l2];//输出l1长度的word1(即word1)变换成l2长度的word2(即word2)所需要的最小操作数
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/668124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

挑战杯 python 机器视觉 车牌识别 - opencv 深度学习 机器学习

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

基于ESP8266 开发板(MCU)遥控小车

遥控小车 ​ 遥控界面 ​ 【项目源码】 第一版ESP8266 https://github.com/liyinchigithub/esp8266_car_webServerhttps://github.com/liyinchigithub/esp8266_car_webServer 第二版ESP32 GitHub - liyinchigithub/esp32-wroom-car: 嵌入式单片机 ESP32 Arduino 遥控小车&a…

前端学习第4天

一、复合选择器 1.后代选择器 2.子代选择器 3.并集选择器 4.交集选择器 5.伪类选择器 1.伪类-超链接&#xff08;拓展&#xff09; 二、CSS特性 1.继承性 body放在style中 2.层叠性 3.优先级 属性 !important;&#xff08;最高优先级&#xff09; 1.优先级-叠加计算规则 2.em…

Linux 驱动开发基础知识——设备树的语法驱动开发基础知识(九)

个人名片&#xff1a; &#x1f981;作者简介&#xff1a;学生 &#x1f42f;个人主页&#xff1a;妄北y &#x1f427;个人QQ&#xff1a;2061314755 &#x1f43b;个人邮箱&#xff1a;2061314755qq.com &#x1f989;个人WeChat&#xff1a;Vir2021GKBS &#x1f43c;本文由…

调试OpenHarmony应用/服务

调试 OpenHarmony 应用/服务是开发过程中的一个重要环节&#xff0c;它帮助开发者发现并修复程序中的错误&#xff0c;确保应用/服务的稳定性和可靠性。OpenHarmony 是一个开源的操作系统&#xff0c;由华为发起并持续推动的一个多设备分布式操作系统。下面将介绍如何在 OpenHa…

数据库-计算机三级学习记录-4DBAS功能概要设计

DBAS功能概要设计 参照b站【计算机三级数据库技术】 DBAS功能设计包括应用软件中的数据库事务设计和应用程序设计。 功能设计过程一般被划分为总体设计、概要设计和详细设计。而具体到数据库事务设计部分&#xff0c;又可分成事务概要设计和事务详细设计。完成系统设计工作之后…

YoloV8改进策略:HAM混合注意力机制改进YoloV8|多种改进,多种姿势涨点|代码注释详解

摘要 HAM通过快速一维卷积来缓解通道注意机制的负担,并引入通道分离技术自适应强调重要特征。HAM作为通用模块,在CIFAR-10、CIFAR-100和STL-10数据集上实现了SOTA级别的分类性能。 论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0031320322002667?vi…

Leetcode 3027. Find the Number of Ways to Place People II

Leetcode 3027. Find the Number of Ways to Place People II 1. 解题思路2. 代码实现 题目链接&#xff1a;3027. Find the Number of Ways to Place People II 1. 解题思路 这一题的话我也没想到啥特别好的思路&#xff0c;采用的纯粹是遍历剪枝的思路。 遍历的话好理解&…

python接口自动化之接口测试用例(详解)

简介 接口测试是软件测试中非常重要的一种测试类型&#xff0c;它主要针对系统的接口进行测试&#xff0c;检查接口之间的交互是否符合预期。在进行接口测试时需要注意以下几个方面&#xff1a; 接口测试用例设计 接口测试用例设计需要考虑到接口的输入、输出、边界条件、异常…

【操作系统】为什么在Windows系统上tqdm跟print函数两者不是同步输出的呢?

1 问题描述 今天在学习tqdm的时候&#xff0c;遇到一个问题&#xff0c;就是我发现trange的输出跟主线程的print函数不是同步输出的&#xff1b; 我使用的测试代码如下&#xff1a; import sysfrom tqdm import trangedef main():X 100for i in trange(X):# for i in trange…

网易和腾讯面试题精选---API 设计和开发面试问答

介绍 API 设计和开发是不断发展的软件工程领域的关键组成部分。随着企业越来越依赖互连系统,创建强大、高效和用户友好的 API 的能力已成为科技行业抢手的技能。无论您是经验丰富的 API 开发人员还是准备面试的候选人,掌握 API 设计的复杂性都是至关重要的。本文深入探讨了一…

基于Springboot的兼职网(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的兼职网&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

《动手学深度学习(PyTorch版)》笔记7.2

注&#xff1a;书中对代码的讲解并不详细&#xff0c;本文对很多细节做了详细注释。另外&#xff0c;书上的源代码是在Jupyter Notebook上运行的&#xff0c;较为分散&#xff0c;本文将代码集中起来&#xff0c;并加以完善&#xff0c;全部用vscode在python 3.9.18下测试通过&…

阿里云入门

阿里云是阿里巴巴集团提供的云计算服务平台&#xff0c;提供各种云服务&#xff0c;包括计算、存储、网络、数据库、安全等。以下是阿里云入门的一些建议步骤&#xff1a; ### 1. **注册阿里云账号&#xff1a;** - 访问 [阿里云官方网站](https://www.aliyun.com/)&#x…

DevOps落地笔记-14|部署流水线:打造一站式部署的关键平台

上一课时我主要介绍了实现自动化测试的范围、流程和结构图&#xff0c;自动化测试是持续集成实践不可或缺的一部分&#xff0c;从而使得软件向高效率和高质量迈进了一大步。持续集成主要关注的是代码是否可以编译成功、是否可以通过单元测试和验收测试等。但持续集成并不能实现…

HubSpot营销自动化如何优化营销流程?

HubSpot营销自动化在优化营销流程、减少手动工作以及提高效率方面发挥着关键作用。以下是一些具体的方法和策略&#xff1a; 1. 自动化电子邮件营销&#xff1a; 利用HubSpot的电子邮件自动化功能&#xff0c;设置触发条件&#xff0c;使邮件发送根据用户行为或阶段自动进行。…

Spark 依赖包加载方式

1 Spark 依赖包来源 我们知道Spark application运行加载依赖有三个地方&#xff1a; systemClasspath&#xff1a;Spark安装时候提供的依赖包&#xff0c;${SPARK_HOME}/jars下的包。spark-submit --jars 提交的依赖包spark-submit --config "spark.{driver/executor}.e…

Java SPI 代码示例

Java Service Provider Interface 是JDK自带的服务提供者接口又叫服务发现机制更是一种面向接口的设计思想。即JDK本身提供接口类&#xff0c; 第三方实现其接口&#xff0c;并作为jar包或其他方式注入到其中&#xff0c; 在运行时会被JDK ServiceLoader 发现并加载&#xff0c…

gd32F470配置CAN通信

can.c #include "can.h"can_trasnmit_message_struct transmit_message;//传入参数为0,则初始化CAN0的GPIO引脚&#xff1b;传入参数为1,则初始化CAN1的GPIO引脚 void CanGpioInit(void) {/* enable can clock */rcu_periph_clock_enable(RCU_CAN0);rcu_periph_cloc…

最大子数组(c++题解)

题目描述 题目描述 给你一个长度为 的整数数组 。 求长度为 的 的连续子数组 中 的最大值。 连续子数组定义&#xff1a; 一个数列的连续子数组是指从原数组中连续若干个元素组成的子数组。 例如&#xff0c;和是的连续子数组&#xff0c;但和不是的连续子数组。 输…