程序员人生 网站导航

KMP(二)

栏目:php教程时间:2015-05-21 08:35:09
#include <iostream> #include <cstring> #include <cstdio> using namespace std; int main() { char a[10050],s[1000007]; int c;scanf("%d",&c); while(c--) { scanf("%s%s",a,s); int next[10007]={}; int i=0,j=-1; next[0]=-1; int len=strlen(a); while(i<len) { if(j==-1 || a[i]==a[j]) next[++i]=++j;//先++,后赋值 else j=next[j]; } int ans=0; i=j=0; int n=len; len=strlen(s); while(i<len) { if(j==-1 || s[i]==a[j]) { ++i;++j; } else { j=next[j]; } if(j==n) ans++; } printf("%d ",ans); } return 0; }
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐