KMP字符串匹配模板代碼
阿新 • • 發佈:2018-02-22
%d none tps clu tar amp names img close
洛谷的模板傳送門
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=2000200;
int lena,lenb,next[N];
char a[N],b[N];
int main()
{
scanf("%s%s",a,b);
lena=strlen(a);
lenb =strlen(b);
next[0]=next[1]=0;
int k=0;
for(int i=1;i<lenb;i++){
while(k&&b[i]!=b[k])
k=next[k];
next[i+1]=b[i]==b[k]?++k:0;
}
k=0;
for(int i=0;i<lena;i++){
while(k&&a[i]!=b[k])
k=next[k];
k+=a[i]==b[k]?1:0;
if(k==lenb)
printf( "%d\n",i-lenb+2);
}
for(int i=1;i<=lenb;i++)
printf("%d ",next[i]);
return 0;
}
View Code
KMP字符串匹配模板代碼