描述
Levenshtein 距离,又称编辑距离,指的是两个字符串之间,由一个转换成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。编辑距离的算法是首先由俄国科学家Levenshtein提出的,故又叫Levenshtein Distance。
Ex:
字符串A:abcdefg
字符串B: abcdef
通过增加或是删掉字符”g”的方式达到目的。这两种方案都需要一次操作。把这个操作所需要的次数定义为两个字符串的距离。
要求:
给定任意两个字符串,写出一个算法计算它们的编辑距离。
本题含有多组输入数据。
输入描述:
每组用例一共2行,为输入的两个字符串
输出描述:
每组用例输出一行,代表字符串的距离
#动态规划
'''
(1)当两个字符串都为空串,编辑距离为0;
(2)当其中一个字符串为空串时,那么编辑距离为另一个非空字符串的长度;
上面两种情况初始化赋值
(3)当两个字符串均为非空时(长度分别为 i 和 j ),取以下三种情况最小值即可:
1、长度分别为 i-1 和 j 的字符串的编辑距离已知,那么加1即可(插入);
2、长度分别为 i 和 j-1 的字符串的编辑距离已知,那么加1即可(插入);
3、长度分别为 i-1 和 j-1 的字符串的编辑距离已知:
此时考虑两种情况,若第i个字符和第j个字符不同,那么加1即可(替换);如果相同,那么不需要加1(两个字符串都加上相同的字符,不影响距离)。
'''
while True:
try:
l1 = input()
l2 = input()
res = [[x + y for y in range(len(l1)+1)] for x in range(len(l2)+1)]
for i in range(1,len(l2)+1):
for j in range(1,len(l1)+1):
if l2[i-1] == l1[j-1]: #因为res是从下标1开始计算,所以-1后才是原字符串的比较的那个字符
d = 0
else:
d = 1
res[i][j] = min(res[i-1][j]+1,res[i][j-1]+1,res[i-1][j-1]+d)
print(res[len(l2)][len(l1)])
except:
break
网友评论