汉明距离理解与计算

**汉明距离**是求两个等长字符串之间对应位置的不同字符的个数。
也就是求将一个字符串变换成另一个字符串所需要替换字符的个数。

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值