KMP笔记
KMP
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<cmath> 5 using namespace std; 6 int len,len1,next[100001]; 7 char st[10000],st1[10000]; 8 bool fid; 9 int main(){ 10 fid=false; 11 scanf("%s",st); 12 scanf("%s",st1); 13 memset(next,0,sizeof(next)); 14 next[0]=-1; 15 len=strlen(st); 16 len1=strlen(st1); 17 for(int i=1,j=0;i<len;i++){ 18 for(j=next[i-1];j!=-1&&st[j+1]!=st[i];j=next[j]); 19 if(st[j+1]==st[i])j++; 20 next[i]=j; 21 } 22 for(int i=0,j=-1;i<len1;i++){ 23 for(;j!=-1&&st[j+1]!=st1[i];j=next[j]); 24 if(st[j+1]==st1[i])j++; 25 if(j==len-1){ 26 printf("YES\n"); 27 fid=true; 28 break; 29 } 30 } 31 if(!fid){ 32 printf("NO\n"); 33 } 34 return 0; 35 }