创建字符串“ABAB”的后缀树时,我只得到2个节点:
ABAB和BAB
最长的重复子字符串(“AB”)应该位于“最深的节点,至少有k个后代”,但这不是我的字符串的情况,这里有什么不对?
由于
答案 0 :(得分:2)
如果您使用的某种形式的后缀树只有两个节点用于字符串ABAB,那么它将无法直接使用您引用的算法。这就是后缀树的样子,O
表示节点,$
用于标记字符串的结尾。
O
/ \
/ \
B AB
/ \
O O
/ \ / \
$ AB$ $ AB$
/ \ / \
O O O O
此处的关键功能(以及您正在使用的树中缺少的)是每个叶节点对应于字符串的后缀。
具有至少两个叶子后代的最深节点位于路径AB(深度是从根到达该节点所需的子串长度,在这种情况下为2),这确实是最长的重复子串。