1

创建字符串“ABAB”的后缀树时,我只得到 2 个节点:

ABAB 和 BAB

最长的重复子字符串(“AB”)应该位于“具有至少 k 个后代的最深节点”,但我的字符串不是这种情况,这里有什么问题?

谢谢

4

1 回答 1

2

如果您使用某种形式的后缀树,它只有两个节点用于字符串 ABAB,那么它不会直接与您引用的算法一起使用。这就是后缀树的样子,O代表节点并$用于标记字符串的结尾。

         O
        / \
       /   \
      B     AB
     /       \
    O         O
   / \       / \
  $  AB$    $  AB$
 /     \   /     \
O       O O       O

这里的关键特征(您正在使用的树中缺少该特征)是每个叶节点对应于字符串的后缀。

具有至少两个叶后代的最深节点位于路径 AB 处(深度是从根到达该节点所需的子串长度,在本例中为 2),这确实是最长的重复子串。

于 2012-06-03T17:21:06.220 回答