KMP代码
Posted dudujerry
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了KMP代码相关的知识,希望对你有一定的参考价值。
#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代码的主要内容,如果未能解决你的问题,请参考以下文章