查找给定单词双子词的算法

时间:2011-03-30 22:51:40

标签: algorithm

给定单词V的子词U是double,当它的形式为u = ww时,例如“abab”是“acdababx”的双子词,但“cdab”不是。

我需要一种算法来检查单词V的给定子字U是否为double。 V可以在线性时间内进行预处理,但任何特定U的答案应该具有恒定的时间复杂度,因为每个V都会有很多U.U作为间隔给出,例如如果V =“acdababx”, interval [3..6]对应于子词“daba”。

示例输入和输出:

V = abbacbacca

U =

  • [1 4] - >否
  • [3 8] - >是
  • [5 8] - >否
  • [8 9] - >是
  • [1 10] - >否

这不是任何当前比赛的问题。

1 个答案:

答案 0 :(得分:1)

这是一种算法,它声称在输入字的后缀树中标记所有双字的端点(或者在文献中通常知道,串联重复)(可以用O(n)构造)时间。当然,由于我没有完全访问该文章,我不确定它是否会满足O(1)查询时间。

论文是:Linear time algorithms for finding and representing all the tandem repeats in a string

希望有所帮助。