题目链接:https://leetcode.cn/problems/edit-distance/
难度:困难
描述:
给你两个单词 word1
和 word2
, 请返回将 _word1_
转换成 _word2_
所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
- 插入一个字符
- 删除一个字符
- 替换一个字符
提示:
长度:[0, 500]
题解
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
# r[i][j]: word1[:i] -> word2[:j]的最少操作数
# insert: r[i][j] = r[i][j-1] + 1
# delete: r[i][j] = r[i-1][j] + 1
# replace: r[i][j] = r[i-1][j-1] + 1
m, n = len(word1), len(word2)
r = [[0] * (n+1) for _ in range(m+1)]
# "" -> "" = 0
# "" -> word2[:j] = j
# word1[:i] -> "" = i
for j in range(1, n+1):
r[0][j] = j
for i in range(1, m+1):
r[i][0] = i
for i in range(1, m+1):
for j in range(1, n+1):
r[i][j] = min(r[i][j-1], r[i-1][j], r[i-1][j-1]) + 1
if word1[i-1] == word2[j-1]:
r[i][j] = min(r[i-1][j-1], r[i][j])
return r[-1][-1]