标签:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 5 using namespace std; 6 7 char s[1000010]; 8 char t[10010]; 9 int next1[10010]; 10 int m,n; 11 12 void getnext() 13 { 14 next1[0]=-1; 15 int i=0; 16 int j=-1; 17 while(i<m) 18 { 19 while(j!=-1&&t[i]!=t[j]) 20 { 21 j=next1[j]; 22 } 23 next1[++i]=++j; 24 } 25 } 26 27 int kmp() 28 { 29 int ans=0; 30 getnext(); 31 int i=0; 32 int j=0; 33 while(i<n) 34 { 35 while(j!=-1&&s[i]!=t[j]) 36 { 37 j=next1[j]; 38 } 39 i++; 40 j++; 41 if(j>=m) 42 { 43 ans++; 44 j=next1[j]; 45 } 46 } 47 return ans; 48 } 49 50 int main() 51 { 52 int T; 53 scanf("%d",&T); 54 while(T--) 55 { 56 scanf("%s",&t); 57 scanf("%s",&s); 58 n=strlen(s); 59 m=strlen(t); 60 cout<<kmp()<<endl; 61 } 62 return 0; 63 }
标签:
原文地址:http://www.cnblogs.com/wsruning/p/4856991.html