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 编译。)
KMP 的回退次数是零
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 数出 KMP 的比较次数,再记下文本指针最远走到哪个下标、回退了几次,和暴力的 39 次放在一起输出。 (本题用 g++ -std=c
三种算法位置一个不差
一段文本 abababcababcabababc(19 个字符,下标从 0 起)和一个模式 ababc。 把一段字符折成一个数:h = (h × 31 + 字母序号) % 17,a 记 1、b 记 2、c 记 3。 暴力、哈希、KMP 三种
四个词各跑一次匹配亏在哪
要在一段文本里找四个不同的词。每个词各跑一次 KMP,问题是【0】。
Trie 在多模式匹配里担什么
第 1 步:一棵空树,只有根 第 2 步:放进 he:h → e 第 3 步:放进 his:h 已有,接 i、s 第 4 步:放进 she:另起一支 第 5 步:h 这一格被两个词共用 · h e i s s h e 把四个词建成一棵 Tr