Kmp算法图解——next数组的生成代码
1、前言
首先,我们需要大致理解Kmp算法的整体思想以及大致原理,同时需要学会手算next数组的方法。这些都是很简单并且容易理解的,本文不再赘述,如对以上内容仍有疑问,推荐一个B站视频讲解:BV1jb411V78H
另外本文的所有图片出处:B站视频 BV16X4y137qw
2、代码
以下是本文讲要分析的Kmp算法中关于next数组的生成部分的代码(C语言实现):
void get_next(char ch[], int length, int next[]){ //length为串ch的长度
next[1] = 0;
int i = 1, j = 0; //i为当前主串正在匹配的字符位置,也是next数组的索引
while (i <= length){
if (j == 0 || ch[i] == ch[j])
next[++i] = ++j;
else //匹配失败的情况要进行回溯
j = next[j];
}
}
3、分析的准备——跟着代码走一遍逻辑
分析的例子: