美文网首页
LeetCode 72. 编辑距离

LeetCode 72. 编辑距离

作者: 草莓桃子酪酪 | 来源:发表于2022-08-15 05:52 被阅读0次
题目

给你两个单词 word1 和 word2,请返回将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:

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

例:
输入:word1 = "horse", word2 = "ros"
输出:3
解释:
horse -> rorse (将 'h' 替换为 'r')
rorse -> rose (删除 'r')
rose -> ros (删除 'e')

方法:动态规划

思路同 583. 两个字符串的删除操作,区别在于该题不仅有删除操作,还有插入和替换操作

  • dp[i][j] 表示以下标 i-1 为结尾的字符串 word1 转化成以下标 j-1 为结尾的 word2 所使用的最少操作次数

  • 初始化

    • dp[i][0] 表示以下标 i-1 为结尾的字符串 word1 转化成以下标 -1 为结尾的 word2 所使用的最少操作次数,即以下标 i-1 为结尾的字符串 word1 转化成空字符串所使用的最少操作次数,所以设置为 i
    • dp[0][j] 表示以下标 -1 为结尾的字符串 word1 转化成以下标 j-1 为结尾的 word2 所使用的最少操作次数,即空字符串转化成以下标 j-1 为结尾的字符串 word2 所使用的最少操作次数,所以设置为 j
  • 外部循环表示对字符串 word1 的循环,内部循环表示对字符串 word2 的循环

    • 若字符串的字符相等,即 word1[i-1] == word2[j-1],那么此时不需要进行任何操作,所以 dp[i][j] 为以下标 i-2 为结尾的字符串 word1 转化成以下标 j-2 为结尾的 word2 所使用的最少操作次数,即 dp[i-1][j-1]
    • 若字符串的字符不等,即 word1[i-1] ≠ word2[j-1],那么此时有三种操作方式:对 word1 进行插入操作,其值等于对 word2 进行删除操作,那么此时 dp[i][j] 等于以下标 i-1 为结尾的字符串 word1 转化成以下标 j-2 为结尾的 word2 所使用的最少操作次数加一,即 dp[i][j-1]+1;对 word1 进行删除操作,那么此时 dp[i][j] 等于以下标 i-2 为结尾的字符串 word1 转化成以下标 j-1 为结尾的 word2 所使用的最少操作次数加一,即 dp[i-1][j]+1;对 word1 进行替换操作,那么此时 dp[i][j] 等于以下标 i-2 为结尾的字符串 word1 转化成以下标 j-2 为结尾的 word2 所使用的最少操作次数加一,即 dp[i-1][j-1]+1
      因为求的是最少操作数,那么应选择三种方式的最小值
class Solution(object):
    def minDistance(self, word1, word2):
        dp = [[0] * (len(word2)+1) for row in range(len(word1)+1)]
        for i in range(len(word1)+1):
            dp[i][0] = i
        for j in range(1, len(word2)+1):
            dp[0][j] = j
        for i in range(1, len(word1)+1):
            for j in range(1, len(word2)+1):
                if word1[i-1] == word2[j-1]:
                    dp[i][j] = dp[i-1][j-1]
                else:
                    dp[i][j] = min(dp[i][j-1]+1, dp[i-1][j]+1, dp[i-1][j-1]+1)
        return dp[-1][-1]
参考

代码相关:https://programmercarl.com/0072.%E7%BC%96%E8%BE%91%E8%B7%9D%E7%A6%BB.html

相关文章

  • 72.编辑距离

    72. 编辑距离[https://leetcode-cn.com/problems/edit-distance/]...

  • 编辑距离(edit distance)

    编辑距离 LeetCode 72. 编辑距离 概念 编辑距离,是指将字符串word1通过替换、删除、增加字符的操作...

  • 72.编辑距离

    72.编辑距离[https://leetcode.cn/problems/edit-distance/] 给你两个...

  • [leetcode]72. 编辑距离

    题目 链接:https://leetcode-cn.com/problems/edit-distance/ 给你两...

  • leetcode 72.编辑距离

    编辑距离可以说是动态规划算法中经典的、知名的题目了,题目难度也不小,是一道很好的动态规划的题目。很可能会出现在面试...

  • LeetCode 72. 编辑距离

    1、题目 2、分析 这个题目,主要是抽象起来比较难,其实解法还是挺经典的。1、用自上而下的递归法,主要重叠子的问题...

  • LeetCode 72. 编辑距离

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

  • 经典动态规划:编辑距离

    读完本文,你可以去力扣拿下如下题目: 72.编辑距离[https://leetcode-cn.com/proble...

  • python实现leetcode之72. 编辑距离

    解题思路 经典的动态规划问题最优子结构对应三种操作 72. 编辑距离[https://leetcode-cn.co...

  • 72. Edit Distance, 编辑距离

    72. Edit Distance, 编辑距离

网友评论

      本文标题:LeetCode 72. 编辑距离

      本文链接:https://www.haomeiwen.com/subject/iqdqgrtx.html