Answers:
问题出乎意料的是微不足道的。首先,两个蛮力算法。方形(“重复模式”)是由它的给定的长度 和位置,并且需要时间来验证。如果遍历所有和,则获得算法。我们可以改进,通过第一循环在,然后在距离两个运行指针扫描串。以这种方式,可以验证是否长度的正方形在线性时间存在,给出总共运行时间。
Kolpakov和Kucherov开发了一种算法,用于在时间O (n )中找到单词中的所有最大重复 [1],并且它们的算法可用于在时间O (n )中找到所有最大平方。甲重复的形式为一个子字瓦特ķ X,其中ķ ≥ 2和X是一个适当的前缀瓦特。包含在该重复的最大正方形是(瓦特⌊ ķ / 2 ⌋)2。使用此公式,给定单词中的所有最大重复次数(其中只有),就可以找到最大的平方。
[1] Kolpakov,R.,&Kucherov,G.(1999)。在线性时间内找出单词中的最大重复。在计算机科学基金会,1999年。第40届年度研讨会(pp。596-604)。IEEE。
142857
它不是最长的,因为142857142857
更长。我认为您应该编辑问题以阐明“重复模式”的含义。