kmp算法
一、kmp算法思想
kmp算法解决了字符串匹配算法中每次回都是要从头开始的缺陷。正常朴素字符匹配算法在匹配过程中只要有一个不符合就全部重新匹配,而kmp通过将之前匹配成功的部分信息利用起来,就类似与递归与动态规划。
递归通过分而治之得出答案,但造成有部分运算重复,所以发明了动规。
二、python实现
1.next数组
next数组代表的是匹配串在此次匹配失误所要跳转的匹配下标,原朴素匹配算法都是跳转到开头也就是next数组是全0。当前后有部分相同也就是知道前面部分匹配了就不需要继续匹配。如下图
所以next的值就是在该位置之前成功匹配部分的前后缀相同的最长公共串。
代码如下:
def next(str):
nextarray=[0]
for t in range(1,len(str)):
#找出前后缀
qian=