python-编辑距离算法

def edit_distance(str_1, str_2):
    # 初始化一个二维数组,用于记录单词转化的最小路径数
    len_str1 = len(str_1)
    len_str2 = len(str_2)
    # x轴表示目标字符串,y轴表示元字符串, 多加一个元素,是因为需要把0,0点的元素更新为0,方便计算
    distance_matrix = [[0 for i in range(len_str2 + 1)] for j in range(len_str1 + 1)]
    # 遍历元字符串和目标字符串,用于计算距离
    for i in range(0, len_str1 + 1):
        for j in range(0, len_str2 + 1):
            # 初始化第一行和第一列的距离
            if i == 0:
                distance_matrix[0][j] = j
            if j == 0:
                distance_matrix[i][0] = i
            if i != 0 and j != 0:
                if str_1[i - 1] == str_2[j - 1]:
                    # 当两个字符相等的时候,距离不会增加
                    distance_matrix[i][j] = min(distance_matrix[i - 1][j] + 1, distance_matrix[i][j - 1] + 1,
                                                distance_matrix[i - 1][j - 1])
                else:
                    # 当两个字符不相等的时候,距离增加1
                    distance_matrix[i][j] = min(distance_matrix[i - 1][j] + 1, distance_matrix[i][j - 1] + 1,
                                                distance_matrix[i - 1][j - 1] + 1)
    return distance_matrix[len_str1][len_str2]


str1 = "hello"
str2 = "hello world"
print("%s变成%s需要%d步" % (str1, str2, edit_distance(str1, str2)))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值