KMP

KMP
搞两个链接:1111122222。都讲的特别清晰易懂。

再来个洛谷模板题的链接

最后是代码:

 1 #include<cstdio>
 2 #include<cstring>
 3 int lenT,lenP,k;
 4 int next[1001];
 5 char T[1000001],P[1001];
 6 void make_next(){
 7     k=0;
 8     for(int i=1;i<lenP;i++){
 9         while(k&&P[i]!=P[k])
10             k=next[k-1];
11         if(P[i]==P[k])
12             k++;
13         next[i]=k;
14     }
15 }
16 int kmp(){
17     k=0;
18     for(int i=0;i<lenT;i++){
19         while(k&&P[k]!=T[i])
20             k=next[k-1];
21         if(P[k]==T[i])
22             k++;
23         if(k==lenP)
24             printf("%d
",i-lenP+2);
25     }
26 }
27 int main(){
28     scanf("%s",T);
29     scanf("%s",P);
30     lenT=strlen(T);
31     lenP=strlen(P);
32     make_next();
33     kmp();
34     for(int i=0;i<lenP;i++)
35         printf("%d ",next[i]);
36     return 0;
37 }
View Code

完了

原文地址:https://www.cnblogs.com/jsawz/p/6737091.html