简单哈希记录
def hasAllCodes(self, s, k):
if k > len(s):
return False
exists = set(s[i:i+k] for i in range(len(s) - k + 1))
return len(exists) == (1 << k)
滚动哈希
def hasAllCodes(self, s, k):
"""
:type s: str
:type k: int
:rtype: bool
"""
base = 2
mod = 10**7+177777
rem = 2**k%mod
l = 0
number = 0
if k > len(s):
return False
for i in range(k):
number = (number*base + int(s[i]))%mod
res = set()
res.add(number)
for r in range(k,len(s)):
number = (number*base + int(s[r])-int(s[l])*rem)%mod #移动的时候已经右移了一位,所以减去的rem是k次方不是k-1次方
l += 1
res.add(number)
return len(res) == rem