标签:
分析:求文本串中模式串的个数。KMP 算法模板题。
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int maxn=1e6+10; 5 6 char T[maxn],P[maxn]; 7 int t,next[maxn]; 8 9 void getnext() 10 { 11 int m=strlen(P+1); 12 next[1]=0; 13 for(int k=0,q=2;q<=m;q++){ 14 while(k>0&&P[k+1]!=P[q]) k=next[k]; 15 if(P[k+1]==P[q]) k++; 16 next[q]=k; 17 } 18 } 19 20 int KMP() 21 { 22 int n=strlen(T+1); 23 int m=strlen(P+1); 24 int sum=0; 25 getnext(); 26 for(int k=0,q=1;q<=n;q++){ 27 while(k>0&&P[k+1]!=T[q]) k=next[k]; 28 if(P[k+1]==T[q]) k++; 29 if(k==m){ 30 sum++; 31 k=next[k]; 32 } 33 } 34 return sum; 35 } 36 37 int main() 38 { 39 scanf("%d",&t); 40 while(t--) 41 { 42 scanf("%s%s",P+1,T+1); 43 printf("%d\n",KMP()); 44 } 45 return 0; 46 }
标签:
原文地址:http://www.cnblogs.com/nuc-gxg/p/5466379.html