KMP算法 next nextval求值

参考教材,清华大学,严蔚敏,C语言版,数据结构


j12345678
sabaabcac
next[j]01122312

求next[j]时,查找next[j]之前是否有前缀和后缀相等的字符串,若没有,则next[j]=1,如果存在前缀和后缀相同的字符串,则next[j]的值取前缀码的后一位。
next[1]=0
next[2]=1;j=2之前有a,没有相同的前缀和后缀
next[3]=1;j=3之前有ab,没有相同的前缀和后缀
next[4]=2;j=4 之前有aba,有相同串a,所以next[4]=1+1=2
next[5]=2;j=5之前有abaa,有相同串a,所以next[5]=1+1=2
next[6]=3;j=6之前有abaab,有相同串ab,所以next[6]=2+1=3
next[7]=1;j=7之前有abaabc,没有相同前缀和后缀,所以next[7]=1
next[8]=2;j=7之前有abaabca,有相同串a,所以next[7]=1+1=2

j 1 2 3 4 5 6 7 8
sabaabcac
next[j]01122312
nextval[j]01021302

比较s[j]与s[next[j]]的值,如果s[j]=s[next[j]],nextval[j]=nextval[next[j]],不相等,则nextval[j]=next[j]
nextval[1]=0;
nextval[2]=1; s[2]=b  !=  s[1]=a;nextval[2]=next[2]=1;
nextval[3]=0; s[3]=a  == s[1]=a;nextval[3]=nextval[1]=0;
nextval[4]=2; s[4]=a  !=  s[2]=b;nextval[4]=next[4]=2;
nextval[5]=1; s[5]=b  == s[2]=b; nextval[5]= nextval[2] =1;
nextval[6]=3; s[6]=c  !=  s[3]=anextval[6]=next[6]=3;
nextval[7]=0; s[7]=a  == s[1]=anextval[6]=nextval[1]=0;
nextval[8]=2; s[8]=c  !=  s[2]=bnextval[6]=next[8]=0;

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值