找到字符串s的最长前缀,它是字符串s反转的子字符串

时间:2011-02-20 08:12:43

标签: java algorithm

有没有办法使用线性时间算法来查找字符串s的最长前缀,该字符串是字符串s反转的子字符串?

2 个答案:

答案 0 :(得分:4)

应用Knuth-Morris-Pratt算法搜索反向字符串(T)中的给定字符串(S)。在每次迭代时,它将找到S的最长前缀,即T [1..i]的后缀。然后你只需要找到这些前缀的最大长度。

答案 1 :(得分:4)

是的,有一个O(n)解决方案suffix tree。假设n是字符串s的长度。

  1. 计算s rev ,字符串s的撤销,是O(n)(实际上可以是O(1),但这并不重要。)
  2. 可以在s时间内构建rev O(n) 的后缀树。
  3. s s rev的最长前缀可以在O(n)时间使用后缀树找到。