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 }

 

posted @ 2018-04-25 15:30  DCDCBigBig  阅读(168)  评论(0编辑  收藏  举报