本文目录#
后缀自动机简介#
后缀自动机(SAM)是描述所有后缀集合的最小 DFA,支持在 O(|S|) 时间构建、O(|T|) 时间匹配。可用于子串统计、不同子串数量、最长公共子串等问题。
数据结构#
link
:后缀链接,指向最长合法后缀状态;len
:该状态表示的最长串长度;next
:状态转移映射。
构建算法#
1 | class SuffixAutomaton { |
应用#
- 不同子串数量:
sum(len[v] - len[link[v]])
; - 最长公共子串:在 SAM 上匹配另一个串;
- 出现次数统计:拓扑排序计算 state 的出现次数。
自检清单#
- 是否在构建完成后通过拓扑顺序传播状态计数?
- 是否使用数组而非 Map 以提升常数(若字符集小)?
- 是否考虑内存占用(O(n))且清理资源?
参考资料#
- CP-Algorithms Suffix Automaton:https://cp-algorithms.com/string/suffix-automaton.html
- emaxx.ru SAM 教程
- Competitive Programming 4 字符串章节
本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。