在《KMP快速模式匹配算法》一节中,详细介绍了 KMP 算法解决模式匹配问题的过程(思路、思想)。文章中提到,计算模式串对应的 NEXT 数组是 KMP 算法的重点和难点,并给出了计算 NEXT 数组的 C 语言实现代码:
void Next(char*T,int *next){
next[1]=0;
int i=1;
int j=0;
//next[2]=1 可以通过第一次循环直接得出
while (i<strlen(T)) {
if (j==0||T[i-1]==T[j-1]) {
i++;
j++;
next[i]=j;
}else{
j=next[j];
}
}
}
假设有一个模式串为 "ABAB",则调用 Next() 函数求得的 NEXT 数组是 {0,1,1,2},如下图所示:
图 1 模式串对应的NEXT数组
注意观察这个模式串,第一个字符和第三个字符都是 'A',它们对应的 next 值分