#include <iostream> #include <cstdio> #include <string> using namespace std; const int MAXW = 10000; // const int MAXT = 1000000; string pattern; string text; int nexttable[MAXW]; void Getnexttable(int w){ int i=0;//i是next数组的标号,pattern字符串也是从0开始的,前缀和后缀重合的数量,不用加一 nexttable[i]=-1; int j = nexttable[i];//j是next数组的值,也是跳转到的next编号 while(i<w){ if(-1==j||pattern[i]==pattern[j]){ ++i; ++j; if(i<w){ nexttable[i]=j; } }else{ j=nexttable[j]; } } } int KMPE(int w,int t){ Getnexttable(w); int i=0; int j=0; int k=0; while(j<t){ if(-1==i||pattern[i]==text[j]){ ++i; ++j; }else{ i=nexttable[i]; } if(i==w){ ++k; j=j-i+2; i=0; } } return k; } int main(){ int n; scanf("%d",&n); for(int i=0;i < n;++i){ cin>>pattern; cin>>text; int w = pattern.size(); int t = text.size(); printf("%d\n",KMPE(w,t)); } }