码迷,mamicode.com
首页 > 其他好文 > 详细

KMP代码

时间:2018-10-13 21:43:48      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:out   cin   pac   ring   names   while   main   oid   amp   

#include<iostream>
#include<cstring>
using namespace std;
string T,P;
int nxt[1000002];
void mkNxt(){
nxt[0]=0;
int k,q;
for(k=0,q=1;q<P.length();q++){
while(k>0&&P[k]!=P[q]){
k=nxt[k-1];
}
if(P[k]==P[q]){
k++;
}
nxt[q]=k;
}

}
void KMP(){
int q=0;
for(int i=0;i<T.length();i++){
while(q>0&&P[q]!=T[i]){
q=nxt[q-1];
}
if(P[q]==T[i]){
q++;
}
if(q==P.length()){
cout<<i-q+2<<endl;
}
}
}
int main(){
cin>>T>>P;
mkNxt();
KMP();
for(int i=0;i<P.length();i++){
cout<<nxt[i]<<" ";
}
}

KMP代码

标签:out   cin   pac   ring   names   while   main   oid   amp   

原文地址:https://www.cnblogs.com/dudujerry/p/9784111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!