Python实现字符串编辑距离算法:计算最少操作步骤

本文将介绍如何使用Python实现字符串编辑距离算法,该算法用于计算将一个字符串转换为另一个字符串所需的最少编辑操作次数。

问题描述:

给定两个字符串,例如'kitten'和'sitting',仅通过插入一个字符、删除一个字符或替换一个字符,求最少需要多少步才能将第一个字符串转换为第二个字符串。

解决方案:

动态规划是解决此问题的有效方法。以下是用Python实现的示例代码:pythondef min_edit_distance(str1, str2): m = len(str1) n = len(str2)

# 创建一个二维数组来存储子问题的解    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 str1[i - 1] == str2[j - 1]:                dp[i][j] = dp[i - 1][j - 1]            else:                dp[i][j] = min(dp[i - 1][j - 1], dp[i][j - 1], dp[i - 1][j]) + 1

return dp[m][n]

读取输入的两个字符串str1 = input('请输入第一个字符串:')str2 = input('请输入第二个字符串:')

计算最小编辑距离steps = min_edit_distance(str1, str2)print(f'将字符串'{str1}'转换为'{str2}'最少需要{steps}步操作。')

代码解释:

  1. min_edit_distance(str1, str2) 函数使用动态规划算法计算两个字符串之间的最小编辑距离。2. 它首先创建一个二维数组 dp 来存储子问题的解。3. 然后,它初始化 dp 数组的第一行和第一列,表示将空字符串转换为目标字符串的编辑距离。4. 接下来,使用嵌套循环遍历两个字符串,并根据以下规则填充 dp 数组的剩余部分: * 如果两个字符相等,则当前单元格的值等于左上角单元格的值。 * 否则,当前单元格的值等于左上角、左侧和上方单元格的最小值加1,表示插入、删除或替换操作。5. 最后,dp[m][n] 中的值表示将 str1 转换为 str2 所需的最小编辑距离。

示例:

如果输入字符串为 'kitten' 和 'sitting',则输出将为:

将字符串'kitten'转换为'sitting'最少需要3步操作。

注意:

此代码示例仅计算了最小编辑距离,而没有记录具体的编辑操作。如果您需要输出操作序列,请进一步修改代码。

Python实现字符串编辑距离算法:计算最少操作步骤

原文地址: https://www.cveoy.top/t/topic/XRF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录