二.831(KMP)字符串详解

二.831(KMP)字符串详解_第1张图片

ne[3]枚举2次 二.831(KMP)字符串详解_第2张图片

ne[4],枚举3次二.831(KMP)字符串详解_第3张图片

ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃

ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab

ne[7],aaba,aaba

ne[8],枚举i-1次]aabaa,aabaa

同理

怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多

其实

加的有规律,最多加一

减的规律,例ne[9]不匹配了,返回ne[8]找匹配里的aabaa再找  最长相等前后缀为2.

                                        aabaa长度5,找ne[5]=2所以是2        

代码

二.831(KMP)字符串详解_第4张图片

两个指针二.831(KMP)字符串详解_第5张图片 二.831(KMP)字符串详解_第6张图片 二.831(KMP)字符串详解_第7张图片

第一行:p[2]=p[1]相等了,j=1]两个p分别代表i,j两个指针

第二行:

第三行:ne[2]=1

第一行:p[3]与p[2]不等,j=0空了

第二行:

第三行:ne[3]=0

第一行:

第二行:p[4]与p[1]相等,j=1

第三行:ne[4]=1

循环4次后ne[5]=2,ne[6]=3,ne[7]=4,

第一行:

第二行:p[5]与p[2]相等,j加到5

第三行:ne[8]=5

第一行:回调到这个前缀的末尾第二个a,j=ne[5]=2

再做while,a[9]不等于a[3],j=ne[2]=1

第二行:相等了,j=2

第三行:ne[9]=2

也可以这样

最长相等前后缀为5

你可能感兴趣的:(算法,kmp,算法)