|
|
1
5
Suffix array 是解决该问题的良好数据结构。 Programming Pearls 乔恩·本特利。 |
|
|
2
4
|
|
|
3
1
一个简单的算法是这样做的:
|
|
|
4
0
好吧,这里有一个疯狂的想法。 创建一个函数,确定O(n)中是否有长度为k的重复子字符串(其中n是文本的长度)。这可以通过使用滚动哈希来实现(参见维基百科 Rabin-Karp String Matching Algorithm )在线性时间内生成所有n个哈希值,并使用哈希表/BST(或映射、字典或您的语言所称的任何东西)存储相应的子字符串位置。在将当前哈希插入数据结构之前,我们检查是否以前见过它。如果以前见过,我们只需查找生成此哈希的索引,看看相应的子字符串是否是非重叠匹配。 现在我们可以在O(n)时间内找到一个k长的子字符串,我们只需运行二分查找即可找到最大的k,我们可以使用我们的函数找到一个不重叠的子字符串匹配。 Python中的代码如下
(如果不清楚,很抱歉。现在是早上6:30,我真的需要回去睡觉了:) |