KMP算法:
主串指针不回溯,模式串指针回溯。
next数组和模式串对应
int Index_KMP(SString S,SString T,int next[]){
int i=1,j=1;
while(i<S.length&&j<=T.length){
if(j==0||S.ch[i]==T.ch[j]){
i++;
j++;
}
else
j=next[j]; //模式串向右移动
}
if(j>T.length)
return i-T.length;
else
return 0;
}
求nextval数组:(KMP算法优化)
先求next数组,再令nextval[1]=0
for(int j=2;j<=T.length;j++){
if(T.ch[next[j]]==T.ch[j])
nextval[j]=nextval[next[j]];
else
nextval[j]=next[j];
}
一般求next数组为手算,不再赘述。
本文深入探讨了KMP字符串匹配算法,强调了其主串不回溯、模式串回溯的关键特性,并详细介绍了next数组的构建过程。通过优化算法,提出nextval数组的概念,进一步提升匹配效率。同时,文章提供了KMP算法的实现代码,便于读者理解和应用。
4066

被折叠的 条评论
为什么被折叠?



