KMP算法计算next数组和nextval数组(通俗易懂)

KMP算法(举例说明)

例:给出一个字符串序列:ababaaababaa。利用KMP算法分别求出next数组和nextval数组
分析:
数组索引:0-n
逻辑索引:1-n

next数组:

1、next[0]=0,next[1]=1;
2、当判断一个字母X的next值时,需要将前一个位置的字母Y和其next值m相同的逻辑索引的字母Z进行比较,注意是Y和Z比较,并不是X;

逻辑索引值12N-1N
字符串ZYYX
next数组011

分别有以下两种情况:

  • 相同:则字母X的next值为Y的逻辑索引值+1;
  • 不相同:则和Y进行下一轮比较的是和Z的next值相同的逻辑索引的字母,直到相同为止。注意:我们这里Z的next值为0,前面再无字母,则需要填写的X的next值为1;并且每一轮的比较都是Y和一个字母比较!

根据这个规律我们可以得出ababaaababaa的next数组为:

逻辑索引值123456789101112
字符串ababaaababaa
next数组011234223456

nextval数组:

1、nextval[0] = 0;

2、当判断一个字母X的nextval值时,需要先求出字符串X的next值,然后用X的next值所转化的逻辑索引值的字母Y进行比较,注意这里是X和Y比较

分别有以下两种情况:

  • 不相同:则字母X的nextval值为X的next值
  • 相同:则将X与和Y的next值相同的逻辑索引的字母进行下一轮比较,直到找到不相同为止;如果最后一轮比较的next值为0,则X的nextval值为0;

根据这个规律我们可以得出ababaaababaa的nextval数组为:

逻辑索引值123456789101112
字符串ababaaababaa
next数组011234223456
nextval数组010104210104

如果你觉得这篇文章对您有帮助的话,麻烦帮我点个点个赞关注一下吧,创作不易,有你的支持才是我前进的动力~

  • 28
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听弧丶

你的鼓励将是我最大的前进动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值