LeetCode刷题笔记第72题:编辑距离
想法:
计算两个字符串之间的编辑距离,先获取两个字符串的长度,当有一个字符串长度为0时,编辑距离即为另一个字符串的长度。当两个字符串长度均不为0时,使用动态规划的思想,先构建一个二维数组存放子问题的答案,再循环遍历两个字符串判断相对位置上字符是否相同,使用插入,删除和替换操作完成对字符串之间编辑距离的计算,选择返回其中编辑距离最小的数值。
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
m, n = len(word1), len(word2)
# 构建二位数组来存储子问题的答案
dp = [[0 for x in range(n+1)] for x in range(m+1)]
# 利用动态规划算法,填充数组
for i in range(m+1):
for j in range(n+1):
# 假设第一个字符串为空,则转换的代价为j (j次的插入)
if i == 0:
dp[i][j] = j
# 同样的,假设第二个字符串为空,则转换的代价为i (i次的插入)
elif j == 0:
dp[i][j] = i
# 此时位置元素字符相同时,编辑距离没有发生改变
elif word1[i-1] == word2[j-1]:
dp[i][j] = dp[i-1][j-1]
# 此时位置元素字符不同时,使用插入、删除和替换来完成编辑距离的计算,并返回编辑距离的最小值
else:
insert = 1 + dp[i][j-1]
delete = 1 + dp[i-1][j]
replace = dp[i-1][j-1] + 1
dp[i][j] = min(insert, delete, replace)
return dp[m][n]