给出了两个字符串的广义后缀树:st1和st2。
如果子树中有一个叶超出了表示st1(和/或st2)后缀的V,则需要找到标记1(和/或2)中每个节点V的算法。
我的猜测是,我们需要使用这样一个事实:st1的每个后缀的最后一个字母是$,每个后缀st2的最后一个字母可以是#但在我看来,从下到上扫描树是低效的。
有什么办法吗?
例如:我有两个字符串:st1=abab,st2=aab。在图中,我用标记做了广义后缀树。所以从带字母a的node,我有一片叶子,来自他的子树,代表st1的后缀,所以我标记了它1,我有一片叶子,来自他的子树,代表st2的后缀,所以我也标记了它2。

最佳答案

执行dfs时,可以使用“1”和/或“2”的标志标记父节点(在访问子节点后),这取决于您是否具有st1/st2的结束标记,或者子节点是否已标记为st1/st2的sufix。
这利用了这样一个事实:如果任何子级包含st1的sufix,那么父级也必须包含st1的sufix。

09-26 17:07