字符串匹配的KMP算法

来源:互联网 发布:淘宝小二误判如何申诉 编辑:程序博客网 时间:2024/06/09 17:09

KMP算法参见博文:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html

补充一下NEXT数组的计算方法


next数组,是与字符串长度一样大的数组,记录此位置之前的字符串中前缀和后缀相同的最大长度。因为a前面没有子串,所以记为-1,b前面只有a,根据前缀后缀定义可知,重复最大长度为0,也可以直接认为前面两个固定值为-1、0.

当求第i+1位置的值时,i位置记录了他前面的最长串值,所以只要比较x与d是否相等,若相等,则next[i+1]=next[i]+1

若j不等于i时,j记录他前面的最大值,只需比较y是否与i相等,若相等则,next[i+1]=next[j]+1,不等则重复此过程。


用KMP求包含子串的位置的时间复杂度为O(N)。暴力方法时间复杂度为O(n*m)

原创粉丝点击