查找2个字符串中的差异数

时间:2010-04-14 03:36:57

标签: c# .net php c++ python

int n = string.numDifferences("noob", "newb"); // 2

...

5 个答案:

答案 0 :(得分:12)

您要查找的号码称为 edit distance 。维基百科列出了您可能想要使用的几种算法; Hamming distance是一种非常常见的方法,用于查找相同长度的两个字符串之间的编辑差异(它通常用于纠错码); Levenshtein distance类似,但也会考虑插入和删除。当然,维基百科列出了其他几个(例如 Damerau-Levenshtein distance,其中包括转置);我不知道你想要哪个,因为我不是专家,而且选择是针对特定领域的。不过,其中一个应该可以解决问题。

答案 1 :(得分:1)

假设您只想比较相同索引处的字符,以下C#解决方案(使用LINQ提供的方法)应该可以解决这个问题:

var count = s1.Zip(s2, (c1, c2) => c1 == c2 ? 0 : 1).Sum();

这将“拉链”两个字符串,然后为每个字符相同的索引返回0,并为每个索引不同返回1。然后我们简单地对数字求和,得到结果。

答案 2 :(得分:1)

如果你的意思是“编辑距离”,你已经得到了很好的答案。如果你只是指“不同的字符数”(对于两个相同长度的字符串),在Python中,最简单的方法是:

sum(c1!=c2 for c1, c2 in zip(s1, s2))

如果您还想添加长度差异,请附加

+ abs(len(s1) - len(s2))

当然,如果你想要编辑距离,这种做法太简单了; - )。

答案 3 :(得分:1)

let

P.S。在Codility在线测试中,我被问到了类似的难题,用于在线求职,其中大约2个小时限制为4个难题。我想知道,如果临时机构招聘人员能够逃脱询问如此艰巨的问题来筛选入门级薪资技术支持工作,IT行业会变得人满为患,还是管理层对IT工人造成不合理的压力。

答案 4 :(得分:0)

import math
def differences(s1, s2):
    count = 0
    for i in range(len(s1)):
        count += int(s1[i] != s2[1])
#    count += math.sqrt( (len(s1) - len(s2)) **2) #add this line if the two strings are of different length and differences counts the how many characters one string has more than the other.
    return count

希望这有帮助