概述
在信息论中,两个等长字符串之间的海明距离是两个字符串对应位置的不同字符的个数。即将一个字符串变换成另外一个字符串所需要替换的字符个数。
Example: “toned” 和 “roses” 的汉明距离是3。1011101 和 1001001 的汉明距离是2。2173896 和2233796 的汉明距离是3。
对于一个固定的长度为n的海明距离是长度为n的词语向量空间中一种度量,因为它显然满足的非负,身份的不可分辨和对称性三个条件,并且它满足三角不等式。对于二进制数字来说,海明距离相当于a抑或b的结果中1的个数。
实现
字符串
public static int hamdistance_String(String a, String b){
if(a == null || b == null){
return 0;
}
int l1 = a.length();
int l2 = b.length();
if(l1 != l2){
return 0;
}
int k = 0;
int distance = 0;
while(k < l1){
if(a.charAt(k) != b.charAt(k)){
distance ++;
}
k ++;
}
return distance;
}
数字
public static int hamdistance_Number(int a, int b){
int res = a ^ b;
int distance = 0;
while(res != 0){
if((res & 1) == 1){
distance ++;
}
res >>= 1;
}
return distance;
}