标签:kmp
代码:
#include<cstdio> #include<cstring> using namespace std; char a[1000005],b[10005]; int next[10005]; int LCPS[10005]; int n,m; void GetLCPS() { int j=0; int k=-1; int len=strlen(b); next[0]=-1; while(j<len) { if(k==-1||b[k]==b[j]) { LCPS[j++]=++k; next[j]=k; } else { if(k-1>=0) k=LCPS[k-1]; else k=-1; } } } void KMP() { int i=0; int j=0; int flag=i; int ans=0; int a_len=strlen(a); int b_len=strlen(b); while(i<a_len) { if(j==-1||a[i]==b[j]) { i++; j++; } else { j=next[j]; } if(j==b_len) { j=next[j]; ans++; } } printf("%d\n",ans); } int main() { int t; scanf("%d",&t); while(t--) { scanf("%s",b); scanf("%s",a); GetLCPS(); KMP(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
1686 hdu Oulipo(求模式串在文本串中出现的次数)
标签:kmp
原文地址:http://blog.csdn.net/xky1306102chenhong/article/details/47263869