⚠️ 少了确认那一步,多出来几个
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc:左边是老老实实逐字符比出来的个数,右边是只比哈希、不做确认的个数:
T = "abababcababcabababc"
P = "ababc"
BASE = 31
MOD = 17
def brute(t, p):
return [i for i in range(len(t) - len(p) + 1) if t[i:i + len(p)] == p]
def hs(s):
h = 0
for c in s:
h = (h * BASE + ord(c) - 96) % MOD
return h
def hash_only(t, p):
hp = hs(p)
return [i for i in range(len(t) - len(p) + 1) if hs(t[i:i + len(p)]) == hp]
print(str(len(brute(T, P))) + "/" + str(len(hash_only(T, P))))
全部评论