计算两个字符串的不同之处数量

1 投票
5 回答
4019 浏览
提问于 2025-04-15 21:34
int n = string.numDifferences("noob", "newb"); // 2

??

5 个回答

1

如果你指的是“编辑距离”,那么你已经得到了很好的答案。如果你只是想知道“两个相同长度的字符串中不同的字符数量”,在Python中,最简单的方法就是:

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

如果你还想加上长度差异,可以在后面加上

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

当然,如果你确实想要计算编辑距离,这种方法就太简单了;-).

1

假设你只想比较两个字符串中相同位置的字符,下面这个C#的解决方案(使用LINQ提供的方法)就可以实现:

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

这个方法会把两个字符串“拉链式”地结合在一起,然后对于每个位置,如果字符相同就返回0,如果不同就返回1。最后我们只需要把这些数字加起来,就能得到结果。

13

你想找的这个数字叫做编辑距离。维基百科上列出了几种你可能想用的算法;其中汉明距离是一种很常见的方法,用来找出两个长度相同的字符串之间的编辑差异(它常用于纠错代码);而莱文斯坦距离也很相似,但它还考虑了插入和删除的情况。当然,维基百科上还有其他几种算法(比如达梅尔-莱文斯坦距离,它包括了字符交换的情况);我不是专家,所以不太清楚你需要哪一种,选择哪种算法还得看具体的应用场景。不过,这些算法中的某一个应该能满足你的需求。

撰写回答