⚠️ 只比哈希,会挑出几个位置

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

把一段字符折成一个数:h = (h * 31 + 字母序号) % 17a 记 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))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论