例子:如果函数应该返回true1)S =“abab”2)S =“abcdabcd”3)S =“abcabcabc”4)S =“zzxzzxzzx”
但是如果S =“abcb”返回false.
我也许我们可以重复地在S的子串上调用KMP,然后决定.
例如:对于“abab”:在“a”上呼叫KMP.它返回2(两个实例).现在2 * len(“a”)!= len(s)在“ab”上呼叫KMP.它返回2.现在2 * len(“ab”)== len(s)所以返回true
你能建议任何更好的算法吗?
此外,子串的最大长度必须小于N / 2.
编辑
使用这些启发式,我写了下面的Python代码,因为我的C生锈了
oldstr='ABCDABCD' for i in xrange(0,len(oldstr)/2): newslice=oldstr[0:i+1] if newslice*(len(oldstr)/len(newslice)) == oldstr: print 'pattern found',newslice break