**汉明距离**是求两个等长字符串之间对应位置的不同字符的个数。
也就是求将一个字符串变换成另一个字符串所需要替换字符的个数。
1. 有如下两个字符串
“abcde”
“abbdc” 则这两个字符串的汉明距离为2,因为两个字符串的第三个和第五个位置的字符不同
2.
“12345”
“54321” 同理这两个字符串的汉明距离为4,除了第三个字符,其他四个字符都不同
两个整数之间的汉明距离则是,求两个整数对应的二进制相应位置的不同字符的个数,如LeetCode上的461:
给你两个整数x和y,求x和y的汉明距离,x=1,y=4;
其实就是求对应二进制0001和0100的对应位置不同字符的个数;
这个问题可以转换为求这两个数异或结果中1的个数,即x^y中1的个数。
两个数异或结果为0101,1的个数为2,所以结果为2;
方法:我们可以拿异或结果0101和1做与运算,然后右移一位,重复前面的步骤,直到x^y的值变为0。
class Solution {
public int hammingDistance(int x, int y) {
int s=x^y; //求x与y异或之后的值,转换为二进制就可以得到一的位置
int count=0;
while(s>0){
if((s & 1)==1){ //当s值得最后一位与一为1是计数加一
count++;
}
s=s>>1; //s右移一位
}
return count;
}
}