随便取一个代表类型的题目,其实也就是求从字符串a变形到字符串b,需要多少次操作。
直接上思路:
我们可以按照从后往前遍历的顺序,判断a[i]===b[j]?,如果为真,则i-1,j-1,执行skip操作,直接看前面一个:
为假,需要判断3个操作(假定为从b变到a,但其实无论从谁变到谁,结果都一样)

  1. 插入(在b[j]的位置插入一个与a[i]一样的字母,因为b的长度变长了,所以其实就是i–,j不变)《按照尾插》
  2. 删除(删除b[j]这个元素,那么i不变,j–)《因为此时还不满足a[i]===b[j],所以j还需要往前》
  3. 替换(替换掉,则a[i]===b[j]了,所以i–,j–)
    但是呢,由于3个操作都是可以执行的,那么其实我们就需要列出所有操作的组合了,这个最经典的解法就是递归了。既然要递归,那么一定要有个出口,
    这个出口其实就是咱们没考虑的a和b的长度差异了,假设a先遍历完,那么此时的结果就是abc和ffabc了,注意,此时两者后面为a长度的子字符串一定是相等了的,也就是b的前两个元素还没遍历到,这个时候,肯定是要加上剩下的2个操作的,无论是add还是remove,都一定需要2个操作了。反之,b先遍历完也是如此,所以我们最后的操作数就要加上剩下的j或者是i


注意,最后之所以返回j+1或者i+1,是因为咱们索引是以0为起点的,因此按照上面的例子,剩下的是b[0]和b[1],j是为1的,所以还要加上1。

But,我们之前说过,递归就是把所有可能的操作组合列出来,约等于暴力解法,中间存在太多重复子路径了,因此我们需要进行优化,要优化,就要用动态规划!
其实不难想到,我们每一次的操作都是可以基于上一次的最优解的操作数上执行的,思路和递归的基本一致

我们此时的base(出口),就是第0列和第0行了,上个图

应该非常容易理解了吧。。。。。

1.LeetCode字符编辑距离相关推荐

  1. LeetCode 72. 编辑距离(DP)

    1. 题目 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示 ...

  2. [leetcode] 72. 编辑距离(二维动态规划)

    72. 编辑距离 再次验证leetcode的评判机有问题啊!同样的代码,第一次提交超时,第二次提交就通过了! 此题用动态规划解决. 这题一开始还真难到我了,琢磨半天没有思路.于是乎去了网上喵了下题解看 ...

  3. LeetCode 72.编辑距离(动态规划)

    编辑距离 针对两个字符串(如英文字母)的差异程度的量化测量,量测方式是看至少需要多少次的处理才能将一个字符串变成另一个字符串. 编辑距离应用 一.可应用于NLP,如拼写检查可以根据一个拼错的字和其他正 ...

  4. 2022-3-22 Leetcode 72.编辑距离

    class Solution {public:int minDistance(string word1, string word2) {int n = word1.length();int m = w ...

  5. Java实现 LeetCode 72 编辑距离

    72. 编辑距离 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字 ...

  6. leetcode 72. 编辑距离

    /***** 定义状态: DP[i][j]其中i表示word1前i个字符,j表示Word2前i个字符 DP[i][j]表示单词1前i个字符匹配单词2前j个字符,最少变换次数: 状态转移: for i: ...

  7. 123. Leetcode 72. 编辑距离 (动态规划- 字符串系列)

    步骤一.确定状态: 确定dp数组及下标含义 dp[i][j]表示word1[:i]的单词与word2[:j]单词之间的最小编辑距离 步骤二.推断状态方程: 在确定递推公式的时候,首先要考虑清楚编辑的几 ...

  8. [leetcode] 72.编辑距离

    给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换一个字符 示例 1: ...

  9. LeetCode 72 编辑距离

    思路:动态规划 class Solution { public:int minDistance(string word1, string word2) { int dp[501][501]; for( ...

最新文章

  1. 大工20春《计算机文化基础》在线测试3,大工20春《计算机文化基础》在线测试3题目【标准答案】...
  2. Java黑皮书课后题第7章:*7.28(数学:组合)编写一个程序,提示用户输入10个整数,然后显示从这10个数中选出两个数的所有组合
  3. 坐标转换 计算机图形学_计算机图形学的转换类型
  4. php psockopen,基于php socket(fsockopen)的应用实例分析
  5. linux rpm安装软件笔记
  6. 用Hello World校验Docker的安装
  7. Python 3.65 安装geopandas
  8. 网站采集软件,全自动网站文章采集器,一键网页数据抓取
  9. java实现邮箱推送
  10. C++实现随机点名器(支持文件读入、手动输入、不重复点名)
  11. 阿龙学堂-中缀-后缀表达式的计算
  12. NSS 错误码详细信息
  13. 程序人生 -【2017年读书报告+书籍推荐】
  14. Tableau学习笔记-04 | 标靶图、甘特图、瀑布图
  15. 中国银联(霸面—面试经验)
  16. Go基础编程:HTTP报文浅析
  17. 最火的腾云驾雾特效软件ae手机版制作飞天特效的教程
  18. 2021道路运输安全员考试每日一练单选题库
  19. Nature | 江西农大黄路生/陈从英等揭示猪血型基因调控肠道菌群的机制
  20. 避免放大器电路设计中的常见问题

热门文章

  1. java 制作动态手机壁纸_android 动态切换壁纸实例 利用service机制实现 附完整源码 带动态截图...
  2. essential c++源码_Goldenmask - 一键化保护你的 Python 源码
  3. c语言 static变量和函数
  4. 闭包 装饰器 偏函数
  5. Ansible8:Playbook循环【转】
  6. linux中对shell变量内容的修改和替换
  7. Flash与数学: 旋轮线(2)
  8. “打工皇帝”唐骏的成功4+1理论
  9. 我是新来的,希望大家以后能多指教.
  10. Spring的IoC解析