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  }
原文地址:https://www.cnblogs.com/XBWer/p/2643056.html