文章分类 - 字符串
Manacher
摘要:https://oi-wiki.org/string/manacher/ Manacher 模板:https://www.luogu.com.cn/problem/P3805 由于回文长度可能偶数或奇数,下面只考虑奇数的。对于偶数长度的回文串,可以在将字符串填充成类似 #a#b#c#a#b# 的。
最小表示法
摘要:一个字符串可以将前缀移到后面,求字典序最小的。 每次比较两个开头 ,知道一位不同,大的那一个直接跳一大步,看代码。 // 模板题代码 #include <bits/stdc++.h> using namespace std; using LL = long long; const in
回文树
摘要:回文树 回文树就是一个森林,存储了所有的在 中出现的回文串,的一半。准确来说不是森林,而是恰好两颗树,一颗存回文串长度为奇数,另外一颗则相反。如下图(From oi-wiki): 但这个回文树太普通了,于是我们还给回文树定义了后缀指针(后缀链接)。 1.一颗树中的节点的后缀指针只可以指向
fail数组 + KMP
摘要:KMP 前缀指针 前缀指针有称失配指针 fail。 即 next 数组,表示对于每个前缀,计算前缀等于后缀(不包含字符串本身)的最大长度。 如下图,蓝色字符串等于另一个蓝色字符串,且绿色字符串等于另一个绿色字符串,所以 next[i] 可为 3 或 6,但是我们要求最大,所以 next[i] = 6
后缀数组
摘要:后缀数组 概念 后缀数组(Suffix Array)sa[] s[i] 表示将所有后缀排序后第 i 小的后缀的编号(所有后缀以起点的位置作编号) 改题目就是需要输出字符串的后缀数组,点我。 大常数 n log^2 求法 用到哈希、二分、排序,且哈希有概率被卡 WA。 来展示一下跑模板题的时间空间(时
字典树 和 AC自动机
摘要:字典树 (Trie) 就是建一棵树,每条边代表一个字符,任意一条从根出发的路径都表示不同的字符串。 任意一条从根出发的路径都表示一下字符串的前缀 字典树模板 如何建树呢? 如何快速查询有多少个字符串的前缀是 呢? 字典树模板 int top = 1, eg[MAXN][70], sum[