KMP算法模板

 1 #define bug(x) cout<<#x<<" is "<<x<<endl
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 const int N=1e3+10;
 5 int n,m;
 6 char p[1005]={"*abaabc"},T[1005];
 7 int f[1005],h[1005];
 8 void get_next(int next[]){
 9     int i=1,j=0;
10     while(i<n){
11         if(j==0||p[i]==p[j]){
12             i++,j++;
13             next[i]=j;
14         }
15         else{
16             j=next[j];
17         }
18     }
19     for(int z=1;z<=n;z++){
20         printf("%d ",next[z]);
21     }
22 }
23 void GetNextval(char* p, int next[])  
24 {    
25     next[1] = 0;  
26     int j = 0;  
27     int i = 1;  
28     while (i < n)  
29     {     
30         if (j == 0 || p[j] == p[i])  
31         {  
32             
33             ++j;  
34             ++i;  
35             if (p[j] != p[i])  
36                 {
37                     //printf("*i=%d j=%d \n",i,j);
38                     next[i] = j;
39                 }
40             else {
41                 //printf("i=%d j=%d \n",i,j);
42                 next[i] = next[j];  
43             }
44         }  
45         else  
46         {  
47             j = next[j];  
48         }  
49     }
50     for(int z=1;z<=n;z++){
51         printf("%d ",next[z]);
52     }
53 }
54 int main(){
55     n=strlen(p+1);
56     for(int i=1;i<=12;i++){
57         printf("%c ",p[i]);
58     }
59     printf("\n");
60     get_next(h);
61     printf("\n");
62     GetNextval(p,f);
63 }
64 /*
65 ababaaababaa
66 
67 */

 

posted @ 2018-07-13 17:12  Venux  阅读(308)  评论(0编辑  收藏  举报