KMP字符串匹配模板代码
洛谷的模板传送门
#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; }
蒟蒻写博客不易,如果有误还请大佬们提出
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:HolseLee
博客地址:www.cnblogs.com/cytus
个人邮箱:1073133650@qq.com
如需转载,请署名作者并附上原文链接,蒟蒻非常感激
名称:HolseLee
博客地址:www.cnblogs.com/cytus
个人邮箱:1073133650@qq.com