后缀自动机+后缀树小记(重!)🐥
后缀自动机:可以接受一个字符串 $s$ 的所有子串的自动机
后缀树:将一个字符串的所有后缀编成一个**压缩**后的 Trie
后缀自动机性质:
1. 由不超过 $2n-1$ 个点构成(所以数组要开2倍)
2. 每个节点是个 endpos 集合,表示其中所有字符串在 $s$ 中结束的位置的集合
3. 反串的 parent 树构成 $s$ 的后缀树
4. 后缀树上两个节点的 lca 对应于这两个后缀的 lcp (然后变成大数据结构)
后缀树性质:
1. 可以由后缀自动机构建而来
2. 每个节点不存储字符,而是代表 startpos 集合的转变(类似于后缀自动机的 endpos),而每条边代表着若干个字符
3. 后缀树上父节点的 startpos 集合包含为其所有儿子的 startpos 集合的并(且一定是不交并)
4. 沿着后缀树走,走到任意一条边上时,走过的串在原串中出现的位置集合为这条边正下方的点的 startpos 集合
5. 叶节点的 startpos 集合大小恰为 1,且唯一元素就是后缀自动机中求出来的 maxlen
6. 结合 3. 4. 5. ,我们预处理出来每个节点 startpos 集合的最小值与最大值,就可以知道一条边上对应的子串出现的第一个位置与最后一个位置