模板-KMP
Posted mukoiaoi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板-KMP相关的知识,希望对你有一定的参考价值。
1 void doit(){ 2 //字符串采用快速读入 从1开始 3 pre=0; 4 next[0]=0;next[1]=0;//起点标记 5 FOR(suf,2,lenx){ 6 while(pre>0&&x[suf]!=x[pre+1]) pre=next[pre]; //递推求最大公共前后缀 7 //next[suf]=以suf为末尾的后缀的【最大公共前后缀】对应的前缀末尾位置-1 8 //0 表示不存在 9 if(x[suf]==x[pre+1]) pre++; 10 next[suf]=pre; 11 } 12 return; 13 } 14 void kmp(){ 15 int ans=0; 16 int pre=0;//匹配指针 17 FOR(suf,1,lens){ 18 while(pre>0&&s[suf]!=x[pre+1]) pre=next[pre]; //匹配指针前滚复位 19 if(s[suf]==x[pre+1]) pre++; //fix 20 if(pre==lenx) pre=next[pre],ans++;//匹配成功,复位(作失配处理); 21 } 22 return; 23 }
以上是关于模板-KMP的主要内容,如果未能解决你的问题,请参考以下文章