前端之家收集整理的这篇文章主要介绍了
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
原文链接:https://www.f2er.com/c/116087.html