手算KMP算法next数组

求解方法:

next数组中第一位写0,第二位写1 。求解后面每个元素的next值时,将该元素前一个元素next值所对应下标的元素进行比较,如果相同,则将前一元素next值+1作为当前元素的next值;否则,则将前一元素next值所对应下标的元素作为新元素重复上述操作;如果找到则将前面元素next值+1作为待求元素的next值;如果找到最前面都找不到相同元素,则将待求元素的next值赋为1。
实例如下:

设模式串为 abaabcaba

第一步:将第 1 个元素和第 2 个元素的next值设置为 01

下标123456789
模式串abaabcaba
next01
第二步:求第 3 个元素 a 的next值,则将其前一元素也就是第 2 个元素 b 的next值 1 与其所对应下标为 1 的元素 a 进行比较;经比较 ba 不同,则第 3 个元素的next值设置为 1
在这里插入图片描述
得到:
下标123456789
-----------------------------------------------------
模式串abaabcaba
next011
第三步:求第 4 个元素 a 的next值,将前一个元素也就是第 3 个元素 a 的next值 1 与下标为 1 的元素进行比较;相同,则将第 3 个元素的next值 +1 作为第 4 个元素的next值。
在这里插入图片描述
得到:
下标123456789
-----------------------------------------------------
模式串abaabcaba
next0112
第四步:求第 5 个元素的next的值,将第 4 个元素 a 的next值 2 所对相应下标的元素 a 进行比较,不同;则比较第 2 个元素的 b 与其next值 1 所对应下标的元素 a 进行比较,相同,则将第 2 个元素next值 +1 作为第 5 个元素的next值。
在这里插入图片描述
得到:
下标123456789
-----------------------------------------------------
模式串abaabcaba
next01122
第五步:求第六个元素 c 的next值,将第五个元素 b next值 2 所对应下标的元素 b 进行比较,相同;则将第 5 个元素的next值 +1 作为第 6 个元素的next值。
得到:
在这里插入图片描述
下标123456789
-----------------------------------------------------
模式串abaabcaba
next011223
第六步:经比较到最前面,值仍然不同,故将第 7 个元素的next值设置为 1
在这里插入图片描述

得到:

下标123456789
模式串abaabcaba
next0112231
第七步
在这里插入图片描述
得到:
下标123456789
-----------------------------------------------------
模式串abaabcaba
next01122312
第八步
在这里插入图片描述
得到:
下标123456789
-----------------------------------------------------
模式串abaabcaba
next011223123

至此,构建完成next数组。

关于计算NextVal数组请移步:手算KMP算法nextval数组
参考文章:
详解KMP算法中Next数组的求法.

  • 8
    点赞
  • 61
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值