(模板)KMP

树下

2018-10-14 16:34:52

Personal

``` void getfail(){ KMP[0]=KMP[1]=0; for(int i=1;i<lenb;i++){ int j=KMP[i]; while(j&&b[i]!=b[j]) j=KMP[j]; if(b[i]==b[j]) KMP[i+1]=j+1; else KMP[i+1]=0; } } void find(){ int j=0; for(int i=0;i<lena;i++){ while(j&&b[j]!=a[i]) j=KMP[j]; if(b[j]==a[i]) j++; if(j==lenb) printf("%d\n",i-lenb+2); } } ```