我还是也写个吧,方便复习,太容易忘了我。。
性质
1.节点p所代表字符串的长度为依次取 \((\ len[fa[p]],len[p]\ ]\) 中每一个数;\(len_{min}[p]=len_{max}[fa[p]]-1\)。
2.\(SAM\)的点数不超过\(2n-2\),边数不超过\(3n-3\)。
3.parent树从父亲指向儿子后,就是翻转字符串\(s\)后建立的后缀树(也是原串的反向前缀树)。
4.两个串的最长公共后缀的状态,位于这两个串状态在parent树上的LCA处。
5.从根节点走可以得到原串的所有子串。
6.每个点的 \(right\) 是其子树所有点的 \(right\) 的并集。即 \(right(p)\subset right(fa[p])\)。
7.每个状态(节点)代表的所有串在原串中的出现次数和每次出现的右端点相同。
应用
参考。
最长公共子串
两个串的最长公共子串:SPOJ1811 LCS.
多个串的最长公共子串:SPOJ1812 LCS2.