编辑距离
编辑距离,是指将一个字符串转变为另一个字符串所需要的最少编辑次数。
许可的编辑操作包括3种:
- 插入——将一个字符替换成另一个字符
- 删除——插入一个字符
- 替换——删除一个字符
例如:
str1 = ‘kitten’ ,str2 = ‘sitting’
str1转换为str2可进行如下操作:
将k替换为s,kitten → sitten
将e替换为i,sitten → sittin
末尾添加g,sittin → sitting
所以编辑距离为3,当然也有其他操作方法,但编辑距离不变。
算法过程(动态规划?):
- str1或str2的长度为0时,返回另一个字符串的长度;
- 初始化
(m+1)*(n+1)
矩阵(+1是为了使矩阵的(0,0)位置为0,方便后续从头扫描矩阵,相当于在str1和str2的开始位置添加一个相同的元素,这两个元素间的编辑距离即为0); - 扫描矩阵d: 如果
str1[i] == str2[j]
,d[i][j]=d[i-1][j-1]
;否则d[i][j]=min( d[i-1][j], d[i][j-1], d[i-1][j-1])+1
4.扫描完毕后,返回矩阵最后一个元素d[m][n]即为所求编辑距离 。
举个栗子:
str1 = ‘apple’,str2 = ‘aply’
时间有点紧张,我先写代码吧,哈哈,后续逐步解释
class Solution:
def minDistance(self, word1: str, word2: str) -> int:
l1, l2 = len(word1)+1, len(word2)+1
res = [[0]*(