给定2个字符串的通用后缀树:st1和st2。
需要找到一个算法,如果子树中有一个表示st1后缀(和/或st2)的子树中的叶子,则将每个节点V标记为1(和/或2)。< / p>
我的猜测是我们需要使用st1的每个后缀的最后一个字母是$并且每个后缀st2的最后一个字母可能是#的事实。但从底部到顶部扫描树似乎效率低下。
任何想法如何处理它?
例如:我有两个字符串:st1 = abab,st2 = aab。在图片中我用标记制作了广义后缀树。所以从带有字母a的节点我有一个来自他的子树的叶子,代表st1的后缀,所以我将它标记为1,我有一个来自他的子树的叶子,代表st2的后缀,所以我也将它标记为2。
答案 0 :(得分:0)
当您执行DFS时,您可以使用标记“1”和/或“2”标记父节点(在访问子节点之后),具体取决于您是否具有st1 / st2的结束标记,或者已将子标记为st1的sufix / ST2。
这利用了以下事实:如果任何子项包含st1的sufix,那么parent也必须包含st1的sufix。