HDU 2203 亲和串

题目:

人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。 
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。 

Input

本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。 
Output

如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。 
Sample Input

AABCD
CDAA
ASD
ASDF

Sample Output

yes
no
题意描述:
输入两个字符串s1和s2
判断能否通过循环移动1使得s2包含在s1中,能输出“yes”否则输出“no”。
解题思路:
首先是一个这是一个字符串匹配问题,其次说是能否通过循环移动使得s2包含在s1中,如果真的一位一位循环移动的话,可能超时不说,确实有些麻烦,那么我们可以讲两个s1串接在一起,这样其实也就是循环移动的最终
结果,最后将s2在两个s1的串中只用KMP进行匹配就好了。
代码实现:
 1 #include<stdio.h>
 2 #include<string.h>
 3 char S[200020],T[100010];
 4 int kmp(char *S, char *T);
 5 int get_next(char *T,int *next);
 6 int main()
 7 {
 8     int l1,l2;
 9     char c[100010];
10     while(scanf("%s%s",S,T) != EOF)
11     {
12         l1=strlen(S);
13         l2=strlen(T);
14         if(l1 < l2)
15         {
16             printf("no
");
17             continue;
18         }
19         else
20         {
21             strcpy(c,S);
22             strcat(S,c);
23             kmp(S,T);    
24         }
25     }
26     return 0;
27 }
28 int get_next(char *T,int *next)
29 {
30     int i=0,j=-1,l2;
31     l2=strlen(T);
32     next[0]=-1;
33     while( i < l2 )
34     {
35         if(j == -1 || T[i] == T[j])
36         {
37             ++i;
38             ++j;
39             next[i]=j;
40         }
41         else 
42             j=next[j];
43     }
44     /*for(i=0;i<l2;i++)
45         printf("%d ",next[i]);
46     printf("
");*/
47 }
48 int kmp(char *S, char *T)
49 {
50     int i=0,j=0,l1,l2;
51     l1=strlen(S);
52     l2=strlen(T);
53     int next[100010];
54     get_next(T,next);
55     while(i < l1 && j < l2)
56     {
57         if(j==-1 || S[i] == T[j]) 
58         {
59             ++i;
60             ++j;
61         }
62         else 
63             j=next[j];
64     }
65     //printf("%d
",j);
66     if(j >= l2)
67     printf("yes
");
68     else
69     printf("no
");
70 }
原文地址:https://www.cnblogs.com/wenzhixin/p/7344076.html