c – 查找字符串是否是一个迭代子字符串?

前端之家收集整理的这篇文章主要介绍了c – 查找字符串是否是一个迭代子字符串?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个字符串S.我如何找到字符串是否遵循S = nT.

例子:
如果函数应该返回true
1)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

你能建议任何更好的算法吗?

解决方法

我可以想到启发式,只有(子串)的Len(原始字符串)/ Len为正整数时才调用子字符串上的KMP.

此外,子串的最大长度必须小于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

猜你在找的C&C++相关文章