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

标签 algorithm

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

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

示例输入和输出:

V = 阿巴巴卡

你=

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

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

最佳答案

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

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

希望对您有所帮助。

关于查找给定单词的双子词的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5493432/

相关文章:

algorithm - 使用 minkowski 和进行碰撞预测

c++ - Floyd 的最短路径算法 C++

algorithm - 给定序列中的子序列数

r - 想知道在这种情况下我是否可以在这里使用 APPLY 而不是使用 FOR LOOP 进行优化?

sql - 优雅地将一组字符串(.txt 文件) append 到另一组字符串(.txt 文件)?

string - 学习垃圾邮件发送者的名字

c# - 基数排序中的分组何时会带来优势?

python-3.x - 重建 2 个顶点之间的多条最短路径的路径

javascript - 如何格式化具有空行的 excel 文件以具有嵌套数组并匹配我需要呈现的 JSON 对象?

sql - 将数字列表分成大致相等的总数