下面是我在markdown中编辑的内容,以图片形式发布出来
对于next函数,在一些情况下还是存在缺陷,此时,也就涉及第二种方法nextval算法,这种方法相交于next算法优势在于发生失配时,滑动距离更大,效率也更高。后续有时间我也会继续完善代码。
//求取next值
void Get_Next(SString T,int next[]){
int j=1,k=0;
next[1]=0;
while(j<T.len){
if(k==0||T.ch[j]==T.ch[k]){
++j;
++k;
next[j]=k;
}else{
k=next[k];
}
}
}
//KMP模式匹配算法
int Index_KMP(SString S,int pos,SString T){
int i=pos,j=1;
while(i<S.len&&j<=T.len){
if(j==0||S.ch[i]==T.ch[j]){
++i;++j;
}else{
j=next[j]; //模式串滑动
}
if(j>T.len)
return i-T.len; //返回匹配位置
else
return 0;
}
}