题解 | #编辑距离(一)#
编辑距离(一)
https://www.nowcoder.com/practice/6a1483b5be1547b1acd7940f867be0da
class Solution:
def editDistance(self , str1: str, str2: str) -> int:
n1 = len(str1)
n2 = len(str2)
dp = [[0 for _ in range(n1+1)] for _ in range(n2+1)]
for i in range(1, n1+1):
dp[0][i] = dp[0][i-1] + 1
for i in range(1, n2+1):
dp[i][0] = dp[i-1][0] + 1
for i in range(1, n2+1):
for j in range(1, n1+1):
if str1[j-1] == str2[i-1]:
dp[i][j] = dp[i-1][j-1]
else:
dp[i][j] = min(dp[i-1][j-1], min(dp[i-1][j], dp[i][j-1])) + 1
return dp[-1][-1]
解题思路
- 先构建一个空矩阵,之后给第一行和第一列分别附上索引值+1;
- 遍历这个矩阵,当前索引值为 i,j,如果str1[j-1]和str2[i-1]相等,则当前的矩阵值等于其左上角的矩阵值;否则,取左上、左、上中的最小值,再加上1,表示需要做一个操作。
复杂度
- 时间复杂度和空间复杂度都是O(mn)。
