【模板】KMP字符串匹配
2017-11-07 16:42
239 查看
Description
如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置,并输出next数组solution
kmp每一次打出来的都千奇百怪,以后就以今天打的为准了:#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <cmath> #define RG register #define il inline #define iter iterator #define Max(a,b) ((a)>(b)?(a):(b)) #define Min(a,b) ((a)<(b)?(a):(b)) using namespace std; typedef long long ll; const int N=1000005; int nxt ,n,m; char a ,s ; void work() { scanf("%s",a+1); scanf("%s",s+1); int p,n=strlen(a+1),m=strlen(s+1); for(int i=2;i<=m;i++){ p=nxt[i-1]; while(p && s[p+1]!=s[i])p=nxt[p]; if(s[p+1]==s[i])nxt[i]=p+1; } p=0; for(int i=1;i<=n;i++){ if(s[p+1]==a[i])p++; else{ while(p && s[p+1]!=a[i])p=nxt[p]; if(s[p+1]==a[i])p++; } if(p==m)printf("%d\n",i-m+1); } for(int i=1;i<=m;i++)printf("%d ",nxt[i]); } int main() { work(); return 0; }
相关文章推荐
- KMP字符串匹配算法模板代码
- P3375 【模板】KMP字符串匹配
- 洛谷 3375_[模板]KMP字符串匹配_KMP
- luogu P3375 【模板】KMP字符串匹配
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
- [洛谷3375]【模板】KMP字符串匹配
- 洛谷—— P3375 【模板】KMP字符串匹配
- 【模板】KMP字符串匹配
- AC日记——【模板】KMP字符串匹配 洛谷 3375
- (模板题)sdut 2125 数据结构实验之串二:字符串匹配(KMP)
- 洛谷 P3375 【模板】KMP字符串匹配
- luoguP3375 【模板】KMP字符串匹配
- poj 3461(kmp字符串匹配模板)
- 洛谷P3375 【模板】KMP字符串匹配
- P3375 【模板】KMP字符串匹配
- kmp-洛谷P3375 【模板】KMP字符串匹配
- 字符串匹配--扩展KMP模板
- [kmp] hdu1711 字符串匹配模板
- 【模板】KMP字符串匹配
- 洛谷P3375 [模板]KMP字符串匹配