python3 求汉明距离

1. leetcode 461 求2个数字之间的汉明距离

这种写法其实的最好的:
return bin(x ^ y).count('1')

class Solution:
    def hammingDistance(self, x: int, y: int) -> int:
        # 求出y的长度,然后再把x补充相应的长度。

        # 找出2个数中较大的数
        if x > y:
            x, y = y, x
       
        res = 0 
        
        m = bin(x)[2:]
        n = bin(y)[2:]
        l = len(n) 
        # print(m.zfill(l))
        # print(n)
 
        
        for i, j in zip(m.zfill(l), n):
            if i != j:
                res += 1
        # print(res)
        return res

2. 求2个相等长度的字符串之间的汉明距离

"""
# 计算韩明距离
# 所谓 汉明距离:
# 对于二进制字符串a与b来说,它等于a 异或b以后所得二进制字符串中“1”的个数。
# https://zh.wikipedia.org/wiki/%E6%B1%89%E6%98%8E%E8%B7%9D%E7%A6%BB
# 字符串--->阿斯卡 ---> binary value 

# [https://cryptopals.com/sets/1/challenges/6](https://cryptopals.com/sets/1/challenges/6)

"""

a = 'this is a test'
b = 'wokka wokka!!!'

def hamming(a, b):
    m = ''.join([format(ord(i), 'b').zfill(8) for i in a])
    n = ''.join([format(ord(i), 'b').zfill(8) for i in b])
    print(m)
    print(n)

    want = 0
    for r, t in zip(m, n):
        if r != t:
            want += 1
    print(want)
    return want     

hamming(a, b)     # 37 

你可能感兴趣的:(python3 求汉明距离)