kmp 模版
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 }
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 }
轉(zhuǎn)載于:https://www.cnblogs.com/acSzz/archive/2012/03/15/2398618.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
- 上一篇: 突袭HTML5之SVG 2D入门1 -
- 下一篇: 猴子管理法则(网络文摘)