Python 代码实现最少字符串编辑距离算法
Python 代码实现最少字符串编辑距离算法
字符串编辑距离是指两个字符串间的最小编辑次数,通常用于比较字符串的相似度。
编辑可以包括插入、删除和替换操作。
解题思路:
使用动态规划来解决最少字符串编辑距离问题。具体步骤如下:
-
创建一个二维数组
dp,其中dp[i][j]表示字符串s1的前i个字符和字符串s2的前j个字符的最少编辑距离。 -
初始化
dp数组。当s1为空字符串时,将字符串s2转换成s1需要插入s2的所有字符,即dp[0][j] = j(0 <= j <= len(s2))。同理,当s2为空字符串时,将字符串s1转换成s2需要插入s1的所有字符,即dp[i][0] = i(0 <= i <= len(s1))。 -
逐个计算
dp数组的值。当s1[i - 1]等于s2[j - 1]时,即字符串s1的第i个字符和字符串s2的第j个字符相同时,不需要进行任何操作,此时dp[i][j]等于dp[i - 1][j - 1]。否则,需要进行插入、删除或者替换操作,dp[i][j]等于以下三种情况的最小值:1)插入操作:
dp[i][j] = dp[i][j - 1] + 12)删除操作:
dp[i][j] = dp[i - 1][j] + 13)替换操作:
dp[i][j] = dp[i - 1][j - 1] + 1 -
最终的最少字符串编辑距离即为
dp[len(s1)][len(s2)]。
代码实现如下:
def minEditDistance(s1, s2):
m, n = len(s1), len(s2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
# 初始化dp数组
for i in range(1, m + 1):
dp[i][0] = i
for j in range(1, n + 1):
dp[0][j] = j
# 计算dp数组的值
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][j - 1], dp[i - 1][j], dp[i - 1][j - 1]) + 1
return dp[m][n]
示例:
s1 = 'kitten'
s2 = 'sitting'
min_edit_distance = minEditDistance(s1, s2)
print(min_edit_distance) # 输出结果为3,即将'kitten'转换成'sitting'需要进行3次编辑操作。
原文地址: https://www.cveoy.top/t/topic/m7Ug 著作权归作者所有。请勿转载和采集!