KMP模板

 1 void NXT()
 2 {
 3     int len=strlen(b);
 4     nxt[0]=-1;
 5     int j=0,k=-1;
 6     while(j<len-1)
 7     {
 8         if(k==-1||b[j]==b[k])
 9         {
10             j++;
11             k++;
12             if(b[j]!=b[k]) nxt[j]=k;
13             else nxt[j]=nxt[k];
14         }
15         else k=nxt[k];
16     }
17 }
18 int KMP()
19 {
20     int i=0,j=0;
21     while(i<strlen(a)-1&&j<strlen(b)-1)
22     {
23         if(j==-1||a[i]==b[j]) 
24         {
25             i++;
26             j++;
27         }
28         else j=nxt[j];
29     }
30     if(j==strlen(b)) return i-j+1;
31     return -1;
32 }

 

posted @ 2019-08-01 10:43  zgym  阅读(188)  评论(2编辑  收藏  举报