在解题步骤中
一定要仔细阅读!!!!
分清目标字符串和模式字符串
目标字符串 | abcdefgh
模式字符串 | abcab
next数组只对应与模式字符串
模式字符串 | abcab
例子:abcab的next数组计算方法
下标 | 0 | 1 | 2 | 3 | 4 |
模式字符串 | a | b | c | a | b |
next数组 | 0 | 1 | 1 | 1 | 2 |
一定要仔细阅读!!!!
下边列出计算过程:
-
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;