KMP算法
# KMP算法
def KMP(self, haystack: str, needle: str) -> int:
# 计算next数组
ne = [0] * len(needle)
if len(needle) > 0:
ne[0] = -1
i = 2
j = 0
while i < len(needle):
if needle[i - 1] == needle[j]:
j += 1
ne[i] = j
i += 1
elif j > 0:
j = ne[j]
else:
ne[i] = 0
i += 1
# 匹配
i = j = 0
while i < len(haystack) and j < len(needle):
if haystack[i] == needle[j]:
i += 1
j += 1
elif ne[j] == -1:
i += 1
else:
j = ne[j]
return i - j if j == len(needle) else -1
最后更新于
这有帮助吗?