hdu 2087(kmp)

 1 /* 
 2 * kmp
 3 */
 4 
 5 #include <cstdio>
 6 #include <iostream>
 7 
 8 using namespace std;
 9 
10 const int N = 1005;
11 
12 int next[N];
13 char str[N], pat[N];
14 
15 void indexNext() {
16     int k = 0;
17     next[1] = 0;
18     for (int i=2; pat[i]; ++i) {
19         while (k && pat[k+1]!=pat[i]) k = next[k];
20         if (pat[k+1] == pat[i]) ++k;
21         next[i] = k;
22     }
23 }
24 
25 int kmp() {
26     int k = 0, cs = 0;
27     int lenPat = strlen(pat) - 1; 
28     for (int i=1; str[i]; ++i) {
29         while (k && pat[k+1]!=str[i]) k = next[k];
30         if (pat[k+1] == str[i]) ++k;
31         if (k == lenPat) ++cs, k = 0;
32     }
33     return cs;
34 }
35 
36 int main() {
37     str[0] = pat[0] = ' ';
38     while (scanf("%s", str+1), str[1]!='#') {
39         scanf ("%s", pat+1);
40         indexNext();
41         printf ("%d\n", kmp());
42     }
43     return 0;
44 }

 

posted on 2012-05-06 21:52  Try86  阅读(160)  评论(0)    收藏  举报