⚠️ 少了确认那一步,多出来几个

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

一段文本 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))))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论