找到最长的重复字符串及其在给定字符串中重复的次数

时间:2010-01-31 14:33:05

标签: c algorithm

例如,给定字符串“ abc fghi bc kl abcd lkm abcdefg ”,该函数应返回字符串“ abcd ”并且计数为2.

O(n ^ 2)解决方案似乎很容易,但我正在寻找更好的解决方案。

编辑:如果没有比O(n ^ 2)更好的方法,那么哪种方法最佳性能。

2 个答案:

答案 0 :(得分:9)

您可以通过构建suffix tree并从根到最深的内部节点获取路径,在线性时间内解决此问题。这将给你最长的重复字符串。一旦你有了这个字符串,计算它出现的次数是微不足道的。

答案 1 :(得分:2)

状态机可能比big-O(N ^ 2)更好。

编辑:在另一个答案中建议的后缀树是状态机的实现:)