亲和串

 1 //超时了!!!
 2 #include<stdio.h>
 3 #include<string.h>
 4 
 5 char a[200001];
 6 char b[100001];
 7 int next[100001];
 8 int A,B;
 9 
10 void getnext()
11 {
12     int i,j;
13     i=0;j=-1;
14     next[0]=-1;
15     while(i<B)
16     {
17         if(j==-1||b[i]==b[j])
18             next[++i]=++j;
19         else
20             j=next[j];
21     }
22 }
23 
24 int kmp()
25 {
26     int i,j;
27     i=j=0;
28     getnext();
29     while(i<A)
30     {
31         if(j==-1||a[i]==b[j])
32         {
33             i++;j++;
34         }
35         else
36             j=next[j];
37         if(j==B)  return 1;
38     }
39     return 0;
40 }
41 
42 int main()
43 {
44     int t,i,j;
45     while(scanf("%s%s",&a,&b))
46     {
47         A=strlen(a);
48         B=strlen(b);
49         t=A<B?A:B;
50         for(i=A,j=0;j<=t;j++,i++)
51             a[i]=a[j];
52         A=A+B;
53         if(kmp())
54             printf("yes\n");
55         else
56             printf("no\n");
57     }
58     return 0;
59 }

 

posted @ 2013-04-16 21:51  萧凡客  阅读(179)  评论(0编辑  收藏  举报