后缀自动机
right集:SAM读入字符串 a 后能识别的后缀的集合, 这些后缀分别从{r1 , r2 , r3, ... rx}开始。
后缀自动机的每个节点都是一个right集, 因为每个非叶子节点至少有两个儿子,所以我们可以知道parent树的总结点个数是O(n)的(大概为2倍)。
parent树中的叶子节点的right集大小为 1,因为任何两个节点的right集要么是真包含,要么是相离,所以所有叶子节点都是相离的,
那么我们可以通过统计parent树某个节点的子树中叶子个数来确定其Right集的大小。
统计字符串 a 在 s 中的出现次数:
我们知道sam读入一个字符串 a, 会到达一个节点 stateA, 那么显然 stateA 的right集的大小即为答案。
不同子串个数:
即所有节点的 val(i) - val(fa(i)) 即可。因为对于一个节点映射出的子串,它们的长度是连续的,并且每个长度都唯一对应了一个子串。