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)
相关推荐
努力学算法的蒟蒻16 分钟前
day108(3.9)——leetcode面试经典150
面试·职场和发展
gfdhy18 分钟前
【Linux】服务器网络与安全核心配置|静态IP+SSH加固+防火墙,公网服务器必学实操
linux·服务器·网络·tcp/ip·算法·安全·哈希算法
Frostnova丶27 分钟前
LeetCode 1888 使二进制字符串交替的最少翻转次数
算法·leetcode
王码码203531 分钟前
Flutter for OpenHarmony:es_compression — 高性能 Brotli 与 Zstd 算法实战
算法·flutter·elasticsearch
苏纪云1 小时前
蓝桥杯知识点——day2
数据结构·算法·蓝桥杯
Wect1 小时前
LeetCode 52. N 皇后 II:回溯算法高效求解
前端·算法·typescript
鱼骨不是鱼翅1 小时前
个人简历面试复习-----测试理论篇(一)
面试·职场和发展
iFlyCai1 小时前
数据结构与算法之希尔排序
数据结构·算法·排序算法
Nontee1 小时前
Leetcode Top100答案和解释 -- Python版本(矩阵)
python·leetcode·矩阵
lcreek1 小时前
LeetCode2208. 将数组和减半的最少操作次数、LeetCode2406.将区间分为最少组数
python·算法