KMP模板

 1 void get_next(char b[], int *next)
 2 {
 3     int i = 0;
 4     int j = -1;
 5     next[i] = -1;
 6     int len_b = strlen(b);
 7     while(i < len_b - 1)
 8     {
 9         if(j == -1 || b[i] == b[j])
10         {
11             ++i;
12             ++j;
13             next[i] = j;
14         }
15         else
16         {
17             j = next[j];
18         }
19     }
20 }
21 
22 int kmp_search(char a[], char b[], int next[])
23 {
24     int i = 0;
25     int j = 0;
26     int len_a = strlen(a);
27     int len_b = strlen(b);
28     while(i < len_a && j < len_b)
29     {
30         if(j == -1 || a[i] == b[j])
31         {
32             ++i;
33             ++j;
34         }
35         else
36         {
37             j = next[j];
38         }
39     }
40     if(j >= len_b)
41     {
42         return i - len_b;
43     }
44     else
45     {
46         return -1;
47     }
48 }
posted @ 2012-08-19 14:19  山路水桥  阅读(327)  评论(0编辑  收藏  举报