KMP字符串匹配
原创
©著作权归作者所有:来自51CTO博客作者wx61090d1892228的原创作品,请联系作者获取转载授权,否则将追究法律责任
参考博客:【算法】KMP经典算法,你真的懂了吗? - CSDN博客
def get_next(T=''):
length=len(T)
next=[0]*(length)
next[0]=-1
i=0;j=-1
while(i<length-1):
if j==-1 or T[i]==T[j]:
i+=1
j+=1
next[i]=j
else:
j=next[j]
return next
def KMP(S='',T=''):
pos=[]
next=get_next(T)
i=0 #主串初始位置
j=0 #匹配串初始位置
while(i<len(S)):
if(j==-1 or S[i]==T[j]): #匹配成功或者需要初始化
i+=1
j+=1
if j>=len(T): #匹配完成
pos.append(i-len(T))
j=0
i-=1
else:
j=next[j]
return pos #返回匹配地址数组
if __name__ == '__main__':
print(get_next('abaabcac'))
S='ababababbbababbabababbbab' #主串
T='abababbbab' #匹配串
pos=KMP(S,T)
print(pos)