KMP
MoYingo
菜狗
展开
-
Simpsons’ Hidden Talents(KMP ,两个串的前后缀匹配)
Simpsons’ Hidden Talents 题目 给两个串,求S1的前缀和S2的后缀的最大匹配 思路 拼接两个串,处理出nxt数组,nxt[k] 即为所求,因为它们的最大匹配不能超过原串的长度,所以第一个最大公共前后缀的长度比这两个串的长度都小的即为所求。 拼接,预处理出next数组 选定最大未处理next值(最大匹配长度)并判断是否比两串长小 重复2 直到找到合法next值为止 PS:0特判。 AC代码 #include <bits/stdc++.h> #define inf原创 2021-09-01 18:46:22 · 71 阅读 · 0 评论 -
Count the string(nxet数组应用:统计前缀出现次数)
Count the string 题目 求一个字符串的所有子串的匹配个数和 思路 预处理出next数组,可知每个next数组记录该串的最大前缀的长度(数值上等价于下标)。那么对于某一个长位n的子串s,除了 它本身和模板串匹配外,还有它的最大相同后缀。 那么, ans = 本身的一个 + 最大相同后缀 关于不重不漏,由于答案的第一部分的头部都是模板串的第一个字符,对不同长度一定不同,对第二部分,末尾字符不会相同,同样不会重复 预处理nxt数组 取出一个前缀串,去检查它的[最小相同后缀~最大相同后缀]原创 2021-09-01 18:34:55 · 271 阅读 · 0 评论 -
Cyclic Nacklace(kmp + 构造循环节)
Cyclic Nacklace link 思路 最小循环节长度 等于 序列长度 - nxt 重要结论的直接应用。 记得特判 循环节长度等于序列长度的情况 AC代码 #include <bits/stdc++.h> #define inf 0x3f3f3f3f //#define int long long using namespace std; typedef pair<int, int> PII; const int N = 10 + 1e5, mod = 1e9 + 7; c原创 2021-08-21 21:36:58 · 84 阅读 · 0 评论