1 #include<iostream>
2 #include<string>
3 #include<cstring>
4 using namespace std;
5
6 void kmp_pre(char x[], int m, int Next[])
7 {
8 int i, j;
9 j = Next[0] = -1;
10 i = 0;
11 while (i < m)
12 {
13 int mark1=j,mark2=j;
14 while (-1 != j && x[i] != x[j]) mark1=j,j = Next[j],mark2 = j;
15 Next[++i] = ++j;
16 cout << "(" << i <<","<< mark1<<" " <<mark2 << " " << j << ")";
17 }
18 cout << endl;
19 }
20 int Next[10010];
21 int KMP_Count(char x[], int m, char y[], int n)
22 {
23 int i, j;
24 int ans = 0;
25 kmp_pre(x, m, Next);
26 for (int i = 0; i < m+1; i++)
27 cout << Next[i]<<" ";
28 cout << endl;
29 i = j = 0;
30 while (i < n)
31 {
32 while (-1 != j && y[i] != x[j]) j = Next[j];
33 i++; j++;
34 if (j >= m)
35 {
36 ans++;
37 j = Next[j];
38 }
39 }
40 return ans;
41 }
42 int main()
43 {
44 char a[100], b[100];
45 cin >> a >> b;
46 int lena = strlen(a), lenb = strlen(b);
47 cout << KMP_Count(a, lena, b, lenb) << endl;
48 return 0;
49 }