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

2024-10-01 15:46:28 发布

您现在位置:Python中文网/ 问答频道 /正文

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

??在


Tags: stringintnoobnewbnumdifferences
3条回答

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

假设您只想比较相同索引下的字符,那么下面的C#解决方案(使用LINQ提供的方法)应该可以做到这一点:

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

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

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

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

如果你还想加上长度差,附加

^{pr2}$

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

相关问题 更多 >

    热门问题