最长的重复子字符串问题

时间:2012-06-03 15:38:11

标签: algorithm suffix-tree

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

ABAB和BAB

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

由于

1 个答案:

答案 0 :(得分:2)

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

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

此处的关键功能(以及您正在使用的树中缺少的)是每个叶节点对应于字符串的后缀。

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