首页 > 代码库 > 【模板】kmp
【模板】kmp
不断向失配处转移
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #define maxn 1000005 using namespace std; char t[maxn],p[maxn]; int f[maxn]; void getfail(char* p,int* f) { int m=strlen(p),j; f[0]=0;f[1]=0; for (int i=1;i<m;i++) { j=f[i]; while (j && p[i]!=p[j]) j=f[j]; f[i+1]=p[i]==p[j]? j+1 : 0; } } void find(char* t,char* p,int* f) { int n=strlen(t),m=strlen(p); getfail(p,f); int j=0; for (int i=0;i<n;i++) { while (j && p[j]!=t[i]) j=f[j]; if (p[j]==t[i]) j++; if (j==m) printf("%d\n",i-m+2); } } int main() { scanf("%s",&t); scanf("%s",&p); find(t,p,f); for (int i=1;i<=strlen(p);i++) printf("%d ",f[i]); return 0; }
【模板】kmp
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。