有没有办法使用线性时间算法来查找字符串s的最长前缀,该字符串是字符串s反转的子字符串?
答案 0 :(得分:4)
应用Knuth-Morris-Pratt算法搜索反向字符串(T)中的给定字符串(S)。在每次迭代时,它将找到S的最长前缀,即T [1..i]的后缀。然后你只需要找到这些前缀的最大长度。
答案 1 :(得分:4)
是的,有一个O(n)
解决方案suffix tree。假设n
是字符串s
的长度。
s
rev
,字符串s
的撤销,是O(n)
(实际上可以是O(1)
,但这并不重要。)s
时间内构建rev
O(n)
的后缀树。s
s
中rev
的最长前缀可以在O(n)
时间使用后缀树找到。