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

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
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 return dp[m][n]
|
错误反思
