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