1 void get_next(char *str)
2 {
3 int len=strlen(str);
4 next[0]=-1;
5 int j=0,k=-1;//k记录next[];
6
7 while(j<len)
8 {
9 if(k==-1||str[j]==str[k])
10 {
11 k++;
12 j++;
13 if(str[k]!=str[j])
14 next[j]=k;
15 else next[j]=next[k];
16
17 }
18 else k=next[k];
19 }
20 }
21 int kmp(char *pattern,char *s)
22 {
23
24 get_next(pattern);
25
26
27 int len=strlen(pattern);//模版串
28 int slen=strlen(s);
29 int k=-1, j=0;
30
31 while(k<len&&j<slen)
32 {
33 if(k==-1||pattern[k]==s[j])
34 {
35 j++;
36 k++;
37 }
38 else k=next[k];
39 }
40 if(k<slen)return 0;
41 else return 1;
42
43
44
45 }