参考书籍:严蔚敏版数据结构第4章。
建议啊:如果不懂KPM的原理,看了很多其他人的博客还是不是很懂,暂时就不要看了,直接看代码,根据代码来理解(搞技术对不对?又不是发表论文,非得有理论。),理解到那儿算那儿,时不时的看看,真的说不定那会儿就真的懂了。
说实话,其实我也没怎么懂/只能说多看代码吧,现在是似懂非懂。记录下来,多来看看,说不定就真的懂了。
两段代码:
其实第一段代码还是比较好理解的,就算不知道KPM怎么回事,单纯的看代码也大概了解。
void Next(char*T,int* next){
int i=1;
int j=0;
next[1]=0;
while(i<strlen(T)){
if(j==0||T[i]==T[j]){
++i;
++j;
T[i]=j;
}else{
j=next[j];
}
}
}
第二段代码不是那么好理解,中间又有一个if语句,我知道它为了避免“aaab”这样的字符串,但是呢反正得多看。可能才会理解吧。
void Next(char*T,int* next){
int i=1;
int j=0;
next[1]=0;
while(i<strlen(T)){
if(j==0||T[i]==T[j]){
++i;
++j;
if(T[i]!=T[j]){
T[i]=j;
}else{
T[i]=T[j];
}
}else{
j=next[j];
}
}
}