2010-01-31 85 views
4

例如,在重複的次數,給定的字符串「ABC FGHI BC KL ABCD LKM ABCDEFG」,函數應該返回字符串「ABCD」和計數2.查找最長的重複字符串,並將其給定的字符串

AO(n^2)解決方案似乎很容易,但我正在尋找更好的解決方案。

編輯:如果沒有比O(n^2)更好的方法,那麼哪種方法最適合表現明智。

+4

你的SO用戶名是有點放棄。 – 2010-01-31 14:35:45

+3

這是故意避開SNOBS。 – 2010-01-31 14:38:18

+1

最長的重複子字符串問題:http://en.wikipedia.org/wiki/Longest_repeated_substring_problem – sambowry 2010-01-31 14:44:45

回答

9

您可以在線性時間內通過建立suffix tree,並採取從根到最深的內部的路徑解決這個節點;這會給你最長的重複字符串。一旦你有了這個字符串,計算它出現的次數是微不足道的。

2

一個狀態機可能會提供比大O(N^2)更好的東西。

編輯:後綴樹在對方的回答提出的一種狀態機:)的這樣一個實現

相關問題