KMP算法
作者:
poteman | 来源:发表于
2019-07-04 16:21 被阅读0次def KMP(s, p):
nex = getNext(p)
i, j = 0, 0 # 分别是s和p的指针
while i < len(s) and j < len(p):
if j == -1 or s[i] == p[j]: # j==-1是由于j=next[j]产生
i += 1
j += 1
else:
j = nex[j]
if j == len(p): # 匹配到了
return i - j
else:
return -1
def getNext(p):
nex = [0] * len(p)
nex[0] = -1
i = 0
j = -1
while i < len(p) - 1: # len(p)-1防止越界,因为nex前面插入了-1
if j == -1 or p[i] == p[j]:
i += 1
j += 1
nex[i] = j # 这是最大的不同:记录next[i]
else:
j = nex[j]
return nex
本文标题:KMP算法
本文链接:https://www.haomeiwen.com/subject/znsrhctx.html
网友评论