KMP(二)

前端之家收集整理的这篇文章主要介绍了KMP(二)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
#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; }

猜你在找的PHP相关文章