leetcode 刷题(十八)
动态规划
字符串
编辑距离
难度:中等
给你两个单词 word1 和 word2, 请返回将 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’)
方法一
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21class Solution:
def minDistance(self, word1: str, word2: str) -> int:
n = len(word1)
m = len(word2)
if m*n==0:
return m+n
dp = [[0]*(n+1) for _ in range(m+1)]
for i in range(n+1):
dp[0][i]=i
for i in range(m+1):
dp[i][0]=i
for i in range(1,m+1):
for j in range(1,n+1):
l=dp[i][j-1]+1
d=dp[i-1][j]+1
ld=dp[i-1][j-1]
if word1[j-1]!=word2[i-1]:
ld+=1
dp[i][j]=min(l,d,ld)
return dp[m][n]解析
复杂度分析
时间复杂度 :O(mn),其中 m 为 word1 的长度,n 为 word2 的长度。
空间复杂度 :O(mn),我们需要大小为 O(mn) 的 D 数组来记录状态值。
https://blog.lizhen.store/2024/10/24/leetcode%E5%88%B7%E9%A2%98%EF%BC%88%E5%8D%81%E5%85%AB%EF%BC%89/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 QXA!
评论