洛谷 P3375 【模板】KMP字符串匹配
作者:互联网
本题是kmp的模板题。最后一行将1~n的next数组输出即可。
kmp我是通过这个博客和kuangbin的acm模板然后搞清楚的。
一开始觉得还挺麻烦的。多练几次就好了qwq
AC代码如下:
#include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<vector> #define MAXN 1000005 using namespace std; typedef pair<int,int> pii; typedef long long ll; char s1[MAXN],s2[MAXN]; int next1[MAXN],len1,len2; void Get_next(){ int i,j; next1[0]=i=-1;//前缀 j=0;//后缀 while(j<len2){ if(i==-1||s2[i]==s2[j]) next1[++j]=++i; else i=next1[i]; } } int main(){ scanf("%s%s",s1,s2); len1=strlen(s1),len2=strlen(s2); Get_next(); int i=0,j=0; while(i<len1){ if(-1==j||s1[i]==s2[j]) i++,j++; else j=next1[j]; if(j==len2){ printf("%d\n",i-len2+1); j=next1[j]; } } for(int i=1;i<=len2;i++){ printf("%d ",next1[i]); } }
标签:typedef,P3375,洛谷,int,long,MAXN,KMP,include,模板 来源: https://www.cnblogs.com/mikku39/p/14512521.html