[板子]KMP

Posted FySeA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[板子]KMP相关的知识,希望对你有一定的参考价值。

KMP板子,你甚至可以用这个板子A掉luogu的3375

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 #include<cmath>
 5 #include<queue>
 6 using namespace std;
 7 
 8 char a[1000001],b[1001];
 9 int nexta[1001];
10 
11 int main()
12 {
13     int na,nb,i,j,k,w,e,s;
14     
15     scanf("%s%s",a,b);
16     na=strlen(a);
17     nb=strlen(b);
18     
19     for(i=1;i<nb;i++)
20     {
21         j=nexta[i];
22         while(j!=0&&b[i]!=b[j])
23         {
24             j=nexta[j];
25         }
26         if(b[i]==b[j])
27         {
28             nexta[i+1]=j+1;
29         }
30         else
31         {
32             nexta[i+1]=0;
33         }
34     }
35     j=0;
36     for(i=0;i<na;i++)
37     {
38         while(j!=0&&a[i]!=b[j])
39         {
40             j=nexta[j];
41         }
42         if(a[i]==b[j])
43         {
44             j++;
45         }
46         if(j==nb)
47         {
48             printf("%d\n",i-nb+2);
49         }
50     }
51     
52     for(j=1;j<=nb;j++)
53     {
54         printf("%d ",nexta[j]);
55     }
56     return 0;
57 }

 

以上是关于[板子]KMP的主要内容,如果未能解决你的问题,请参考以下文章

KMP板子

KMP板子题

KMP算法板子

AC自动机及KMP练习

hdu-2087(kmp)

Luogu-P3375 模板KMP字符串匹配