编辑距离(Edit Distance),又称Levenshtein距离,是用来衡量两个字符串差异程度的指标,表示将字符串A转换为字符串B所需最少的编辑操作次数。 最差情况下,如果字符串A和B完全不同,我们需要对A中的每个字符都进行一次插入/删除/替换操作,才能得到和B相同的字符串,因此最坏时间复杂度为O(m*n),其中m和n分别为两个字符串的长度。
以下是Python代码示例:
def edit_distance(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(m + 1):
dp[i][0] = i
for j in range(n + 1):
dp[0][j] = j
for i in range(1, m + 1):
for j in range(1, n + 1):
if s1[i - 1] == s2[j - 1]:
dp[i][j] = dp[i - 1][j - 1]
else:
dp[i][j] = min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]) + 1
return dp[m][n]
该函数使用动态规划算法,通过填充一个m+1行,n+1列的二维数组dp来计算编辑距离。其中dp[i][j]表示将s1中前i个字符转换成s2中前j个字符所需最少的编辑操作次数。
时间复杂度:O(m*n)
空间复杂度:O(m*n)
上一篇:编辑距离 - 动态规划方法