补全幂数组
用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 子串哈希要用到 B 的各次幂。补全 pw 的递推,输出 pw[5](B = 131)。 (本题用
用子串哈希找位置
用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 aba
双哈希数不同的子串
用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 aba
用正反哈希判回文
用 unsigned long long 做前缀哈希:h[i+1] = h[i] × B + 字母序号(a 记 1),不取模,让它自然溢出。 一个串正着算一遍哈希、倒着再算一遍,两个一样就是回文。补全 is_pal,依次判断 abccba、
next 数组里存的是什么
第 1 步:给模式 ababc 填一张表 第 2 步:到第 1 位:重叠 0 个 第 3 步:到第 2 位:重叠 0 个 第 4 步:到第 3 位:重叠 1 个 第 5 步:到第 4 位:重叠 2 个 第 6 步:到第 5 位:重叠 0 个
KMP 凭什么不用退文本指针
失配的时候,KMP 的文本指针一步都不退,靠的是【0】。
失配时模式该跳到哪(C++)
比到模式的第 k 个字符失配了,KMP 会去查 next 表,把 k 换成表里【0】。
ababc 的 next 表
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 把模式的 next 表算出来: #include <iostream> #include <string> #
自己算出 next 表
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 补全 build_next,输出 next 表。 (本题用 g++ -std=c++17 -O0 编译。)
写一个不回退的 KMP
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 补全 kmp,输出全部位置。注意外层 i 一路往前,从不回头。 (本题用 g++ -std=c++17 -O0 编译。)