ne[3]枚举2次
ne[4],枚举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
代码
两个指针 | ||
第一行: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 |