⚠️ 只比哈希,会挑出几个位置
把一段字符折成一个数:h = (h * 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。只比哈希值、不做逐字符确认,数一数会挑出多少个位置:
T = "abababcababcabababc"
P = "ababc"
BASE = 31
MOD = 17
def hs(s):
h = 0
for c in s:
h = (h * BASE + ord(c) - 96) % MOD
return h
hp = hs(P)
pos = [i for i in range(len(T) - len(P) + 1) if hs(T[i:i + len(P)]) == hp]
print(len(pos))
全部评论