Java for You 数据结构 编辑距离 | LeetCode 72

编辑距离 | LeetCode 72

题目描述

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

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

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

​

示例 1:

示例 2:

​

提示:

  • 0 <= word1.length, word2.length <= 500
  • word1 和 word2 由小写英文字母组成

​

题目解析

解决两个字符串的动态规划问题,一般都是用两个指针 i, j 分别指向两个字符串的最后,然后一步步往前走,缩小问题的规模。

对于每对儿字符 s1[i] 和 s2[j],可以有四种操作:

那么「状态」就是指针 i, j 的位置,「选择」就是上述的四种操作。

​

如果使用自底向上的迭代解法,这样定义 dp 数组:dp[i-1][j-1] 存储 s1[0..i] 和 s2[0..j] 的最小编辑距离。dp 数组索引至少是 0,所以索引会偏移一位。

​

然后把上述四种选择用 dp 函数表示出来,就可以得出最后答案了。

​

参考代码

以下为 Java 代码。

递归解法

​

迭代解法

​

复杂度分析

​

  • 时间复杂度 :O(mn),其中 m 为 word1 的长度,nnn 为 word2 的长度。
  • 空间复杂度 :O(mn),我们需要大小为 O(mn) 的 数组来记录状态值。
本文由 java4u.cn 发布,可自由转载、引用,但需署名作者且注明文章出处(作者:白色蜗牛,出处:java4u.cn)。如转载至微信公众号,请在文末添加作者公众号二维码。 https://java4u.cn/algorithms/3278.html

作者: 蜗牛

二叉树的最大深度 | LeetCode 104

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

联系我们

公众号:蜗牛互联网

在线咨询: QQ交谈

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部