leetcode热题100.编辑距离

题目

72. 编辑距离 - 力扣(LeetCode)

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

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

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

示例 1:

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

示例 2:

复制代码
输入:word1 = "intention", word2 = "execution"
输出:5
解释:
intention -> inention (删除 't')
inention -> enention (将 'i' 替换为 'e')
enention -> exention (将 'n' 替换为 'x')
exention -> exection (将 'n' 替换为 'c')
exection -> execution (插入 'u')

提示:

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

思路

我们思考一个问题,两个字符串,如果想让一个字符串变成另外一个,设定长字符串为s1,短字符串为s2,那么我们最多需要多少次修改?

答案是:短的字符串s2的长度 + (长字符串s1长度 - 短字符s2串长度)

因为最坏的情况是短字符串s2中的字符在s1中都找不到,这部分需要替换;然后,删除长字符串中多余的字符。

我们采取记忆化搜索的方法,如果两个字符串相同,这两个字符串就不需要处理;

否则,要么s1删一个,要么s2删一个,要么s1或者s2替换一个,对应:

代码

python 复制代码
class Solution:
    def minDistance(self, word1: str, word2: str) -> int:
        n, m = len(word1),len(word2)
        @cache
        def dfs(i,j):
            if i<0 : return j+1
            if j<0 : return i+1
            if word1[i] == word2[j] : return dfs(i-1,j-1)
            return min(dfs(i-1,j),dfs(i,j-1),dfs(i-1,j-1)) + 1
            
        
        return dfs(n-1,m-1)
相关推荐
地平线开发者几秒前
征程 6 | 多阶段模型量化&debug 简介
算法·自动驾驶
张李浩3 分钟前
Leetcode 454 四数相加II 采用哈希表解决
leetcode·哈希算法·散列表
快乐柠檬不快乐3 分钟前
C++中的代理模式实现
开发语言·c++·算法
月明长歌15 分钟前
【码道初阶-Hot100】LeetCode 560. 和为 K 的子数组:从前缀和到哈希计数,彻底讲透为什么“统计前缀和”就等价于统计子数组个数
算法·leetcode·哈希算法
tankeven21 分钟前
HJ134 1or0
c++·算法
keep intensify25 分钟前
寻找重复数
数据结构·算法·leetcode
圣保罗的大教堂26 分钟前
leetcode 3070. 元素和小于等于 k 的子矩阵的数目 中等
leetcode
dgfhf30 分钟前
高性能计算资源调度
开发语言·c++·算法
x_xbx42 分钟前
LeetCode:19. 删除链表的倒数第 N 个结点
算法·leetcode·链表
weixin_307779131 小时前
OpenClaw-CN 安全增强方案:从理念到落地的全面剖析
开发语言·人工智能·算法·安全·语言模型