我想找出两个相等长度的字符串有多少个不同的字符。我发现异或算法被认为是最快的,但它们返回以位表示的距离。我想要用字符表示的结果。假设“pet”和“pit”以字符表示的距离为 1,但 'e' 和 'i' 可能有两个不同的位,因此 xoring 返回 2。
我写的函数是:
// na = length of both strings
unsigned int HammingDistance(const char* a, unsigned int na, const char* b) {
unsigned int num_mismatches = 0;
while (na) {
if (*a != *b)
++num_mismatches;
--na;
++a;
++b;
}
return num_mismatches;
}
它可以变得更快吗?也许使用一些较低级别的命令或实现不同的算法?
系统:英特尔至强 X5650 上的 Gcc 4.7.2
谢谢