1
A
回答
1
這是一個簡單的O(n)算法,依靠後綴樹構造。
將原始字符串s和補碼串s'加載到相同的後綴樹(O(n)time)中。然後通過爲每個節點x設置兩個標誌f(x)和f'(x),在f(x)(或f'(x))包含s(後綴) S')。現在簡單地遍歷樹,尋找具有兩個標誌設置的最深節點,並且發現s中最長的字符串,其補碼也出現在s中。後處理也僅花費O(n)時間,因此總運行時間爲O(n)。
0
下面的算法是最壞的情況下O(n * n)
和平均情況只是有點超線性。當有很多很長的常見子字符串時,它遇到了最壞的情況。
考慮可以通過在字符串中的任意位置開始形成的子字符串集。一旦只有一個可能的匹配,就構建這些子字符串的一個trie,該字符串以指向原始字符串中某個位置的指針結尾。你必須爲n個子字符串中的每一個工作這個trie,但是你只需要通過該字符串與其他任何其他字符串中最長的公共子字符串來跟蹤它。
一旦你建立了這個數據結構,通過查找樹的遞歸遍歷,尋找一個子串與它的補碼進行配對。由於你只需要配對相反的子字符串,而不是子字符串與字符串中其他所有的位置,因此trie的結構應該使配對非常有效。
如果某些字符在共同點不常見時很常見,那麼您可以通過延遲建立trie來提高性能。
相關問題
- 1. 後綴樹:最長的重複子字符串實現
- 2. 最長的重複子字符串後綴樹dfs
- 3. 後綴樹和最長的重複子字符串問題
- 4. 找到最長的字符串前綴
- 5. 查找字符串中最長的重複子字符串?
- 6. Python 3.4.3 .:二進制字符串樹中所有字符串長度的總和
- 7. 查找最長字符串的長度
- 8. 查找重複字符的最長的子字符串中的
- 9. 算法找到最長後綴的字符串和所述字符串的前綴之間的長度
- 10. 所有後綴的最長前綴字符串長度
- 11. 二進制搜索樹到字符串
- 12. perl:字符串匹配找到最長的子字符串
- 13. 查找字符串數組中最長的字符串
- 14. 最長的子字符串
- 15. 「Set」查找後綴字符串
- 16. 按字符串長度對字符串排序後的字符串進行二進制搜索
- 17. 查找字符串中所有子字符串的長度
- 18. 查找NSArray中的最長字符串
- 19. 通用後綴樹遍歷查找最長公共子串
- 20. 如何從長字符串中查找子字符串(0,91)?
- 21. 用二進制字符串替換子字符串
- 22. 在字符串python中查找最長的唯一子字符串
- 23. 查找最小長度子字符串包含所有的字符串
- 24. 查找字符串中最長重複子字符串所需的Java函數?
- 25. 如何查找字符串中最長的連續子字符串?
- 26. 使用後綴數組實現最長公用子字符串
- 27. 查找字符串中的所有3個字符長度的子字符串
- 28. 訪問VBA查找字符串的最後一個字符串?
- 29. 十六進制字符串到二進制字符串
- 30. 二進制字符串到十六進制字符串java
你能澄清嗎?你想要一個補碼字符串嗎? – Patrick
確切(我想找到最長的一個)。 – user550413