首页 > 代码库 > KMP

KMP

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

再来个洛谷模板题的链接

最后是代码:

技术分享
 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     for(int i=1;i<lenP;i++){
 8         while(k&&P[i]!=P[k])
 9             k=next[k-1];
10         if(P[i]==P[k])
11             k++;
12         next[i]=k;
13     }
14 }
15 int kmp(){
16     k=0;
17     for(int i=0;i<lenT;i++){
18         while(k&&P[k]!=T[i])
19             k=next[k-1];
20         if(P[k]==T[i])
21             k++;
22         if(k==lenP)
23             printf("%d\n",i-lenP+2);
24     }
25 }
26 int main(){
27     scanf("%s",T);
28     scanf("%s",P);
29     lenT=strlen(T);
30     lenP=strlen(P);
31     make_next();
32     kmp();
33     for(int i=0;i<lenP;i++)
34         printf("%d ",next[i]);
35     return 0;
36 }
View Code

完了

KMP