【发布时间】:2012-06-15 18:37:15
【问题描述】:
根据 wiki 的最长公共子串问题可以使用后缀树来解决。
来自wiki:
一组字符串的最长公共子串可以通过 为字符串构建一个通用的后缀树,然后找到 具有来自所有字符串的叶节点的最深内部节点 在它下面的子树中
我不明白。
示例:如果我有:ABCDE 和 XABCZ
那么后缀树是(XABCZ 的一些分支由于空格而省略):
最长的公共子字符串是ABC,但不是我看不到wiki的描述在这里有什么帮助。ABC不是最深的内部节点与叶节点。
对理解这是如何工作的有帮助吗?
【问题讨论】:
-
ABC is not the deepest internal nodes with leaf nodes.不,但是 ABC 是树中任何地方最长的 common 节点字符串。下一个最长的是B-C和D-E,每个都有两个节点。 -
是的
ABC是最长的公共字符串。但我不明白 wiki 描述实际上如何帮助我以编程方式找到它 -
您必须阅读另一个 Wiki:en.wikipedia.org/wiki/Generalised_suffix_tree。可能有一些更好(更容易理解)的资源here。另见stackoverflow.com/questions/969448/…
-
@user384706 - 我认为部分问题在于这不是正确的后缀树。您应该只有一个以根 A-B-C 开头的分支,而 C 将有两个孩子:D-E 和 Z。其余分支类似。你所拥有的基本上只是一个后缀列表,它们都有一个指向它们的根节点。
-
@twalberg:是的,你是对的。 2 个蓝色分支将是一个。但在这种情况下,我如何以编程方式找到它们?我不清楚 wiki 描述有什么帮助
标签: java algorithm data-structures tree substring