关于KMP中next数组的计算

在解题步骤中

一定要仔细阅读!!!!


分清目标字符串和模式字符串

目标字符串 | abcdefgh 
模式字符串 | abcab

next数组只对应与模式字符串

模式字符串 | abcab

例子:abcab的next数组计算方法

下标01234
模式字符串abcab
next数组01112

一定要仔细阅读!!!!


下边列出计算过程:

1.下标为 0 的初值这里设置为 0; 2.下标为 1 的初值这里设置为 1; 3.下标为 2 的初值的计算步骤:
(1).这里假设 i=2;
(2).观察在i下标 之前的模式串,及[ 0 ~ i-1 ].这里为 ab
(3).在i下标 之前的模式串,分别 从左到右从右到左列出所有的字符串,作比较。这里为 :
从左到右:a ; 从右到左:b ; 跨度 1
(4).从左到右 和 从右到左 的模式串 不相等则对应i的 next 的值保持不变 1;
4.下标为 3 的初值的计算步骤:
(1).这里假设 i=3;
(2).观察在i下标 之前的模式串,及[ 0 ~ i-1 ].这里为 abc
(3).在i下标 之前的模式串,分别 从左到右,从右到左列出 所有的字符串,作比较。这里为 :
从左到右:a ; 从右到左:c ; 跨度 1
从左到右:ab ; 从右到左:bc ; 跨度 2
(4).从左到右 和 从右到左 的模式串 不相等则对应i的 next 的值保持不变 1;
4.下标为 4 的初值的计算步骤:
(1).这里假设 i=4;
(2).观察在i下标之前的模式串,及[ 0 ~ i-1 ].这里为 abca
(3).在i下标之前的模式串,分别从左到右,从右到左列出所有的字符串,作比较。这里为 :
从左到右:a ; 从右到左:a ; 跨度 1
从左到右:ab ; 从右到左:ca ; 跨度 2
从左到右:abc ; 从右到左:bca ; 跨度 3
(4).从左到右 和 从右到左 的模式串 跨度为1的模式串 相等则对应i的 next 的值 +跨度 即为 +1;

你可能会纠结于下标为 0,1 的next值:

  • 1.下标为 0 的初值可以自由设定 可以为 0 或者 -1;
  • 2.下标为 0 的初值表示当前当前模式串不做比较;
  • 3.下标为 1 的初值总是在下标为 0 的初值上 +1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值