leetcode-72-编辑距离

题目

https://leetcode.cn/problems/edit-distance/submissions/?envType=study-plan-v2&envId=dynamic-programming

题解

错误题解

image-20240530161830477

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m,n = len(word1),len(word2)
if m == 0:
return n
if n == 0:
return m

dp = [[0 for j in range(n)] for i in range(m)]
if word1[0] == word2[0]:
dp[0][0] = 0
else:
dp[0][0] = 1

for i in range(1,m):
if word1[i] == word2[0]:
dp[i][0] = dp[i-1][0]
else:
dp[i][0] = dp[i-1][0] + 1

for i in range(1,n):
if word1[0] == word2[i]:
dp[0][i] = dp[0][i-1]
else:
dp[0][i] = dp[0][i-1] + 1

for i in range(1,m):
for j in range(1,n):
if word1[i] == word2[j]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1]) + 1

# print(dp)
return dp[m-1][n-1]

正确题解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m,n = len(word1),len(word2)
dp = [[0 for j in range(n+1)] for i in range(m+1)]

for i in range(m+1):
dp[i][0] = i
for j in range(n+1):
dp[0][j] = j

for i in range(1,m+1):
for j in range(1,n+1):
if word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j-1],dp[i-1][j],dp[i][j-1])+1

# print(dp)
return dp[m][n]

错误反思

image-20240530161934578