计算字符串的相似度

题目描述

对于不同的字符串,我们希望能有办法判断相似程度,我们定义了一套操作方法来把两个不相同的字符串变得相同,具体的操作方法如下:

1 修改一个字符,如把“a”替换为“b”。

2 增加一个字符,如把“abdd”变为“aebdd”。

3 删除一个字符,如把“travelling”变为“traveling”。

比如,对于“abcdefg”和“abcdef”两个字符串来说,我们认为可以通过增加和减少一个“g”的方式来达到目的。上面的两种方案,都只需要一次操作。把这个操作所需要的次数定义为两个字符串的距离,而相似度等于“距离+1”的倒数。也就是说,“abcdefg”和“abcdef”的距离为1,相似度为1/2=0.5.

给定任意两个字符串,你是否能写出一个算法来计算出它们的相似度呢?

输入描述:

输入两个字符串

输出描述:

输出相似度,string类型

输入:

abcdef
abcdefg

输出:

1/2

代码如下:

def editDistance(str1,str2):
    len1,len2 = len(str1) +1,len(str2) +1
    dp = [[0 for i in range(len2)]for j in range(len1)]
 
    for i in range(len1):
        dp[i][0] = i
    for j in range(len2):
        dp[0][j] = j
    for i in range(1,len1):
        for j in range(1, len2):
            dp[i][j] = min(dp[i-1][j]+1,dp[i][j-1] +1,dp[i-1][j-1] +(str1[i-1]!=str2[j-1]))
    return dp[-1][-1]
 
 
while True:
    try:
        a = input()
        b = input()
        print('1/' + str(editDistance(a,b)+1))
    except:
        break

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值