题目描述我们把一个字符串A按圆圈排列,你可以从圆圈上任意一个字符开始,顺时钟或者逆时钟读若干个字符,请问是否能得到给定的字符串B?比如字符串A="abcde",我们从第2个字符开始,逆时钟读3个字符,可以得到字符串"bae"。 输入第一行是样例数T(1≤T≤100)。 每个样例的占两行,第一行是字符串A,第二行是字符串B,所有字符串都只含小写英文字母,且长度不超过100个字符。 输出每行输出一个样例的结果,如果可以输出"Yes",否则输出"No"。 样例输入5 abcde cbae abcde deab abc abcabc abcb babcba ab aa 样例输出Yes Yes Yes Yes No | ||
代码如下:
#include<stdio.h>
#include<string.h>
int main()
{
int T;
scanf_s("%d", &T);
while (T--) {
char s1[101];
char s2[101];
char s3[101];
s1[100] = '\0';
s2[100] = '\0';
scanf_s("%s", s1,sizeof(s1));
scanf_s("%s", s2,sizeof(s2));
int len1 = strlen(s1);
int len2 = strlen(s2);
s3[len2] = '\0';
int i, j, ret = 0;
for (i = 0; i < len1; i++) {
int count = 0;
for (j = i; j < i + len2; j++) {
s3[count++] = s1[j % len1];
}
if (strcmp(s3, s2) == 0){
ret = 1;
break;
}
}
if (ret == 0) {
for (i = 0; i < len1 / 2; i++) {
int t = s1[i];
s1[i] = s1[len1 - 1 - i];
s1[len1 - 1 - i] = t;
}
for (i = 0; i < len1; i++) {
int count = 0;
for (j = i; j < i + len2; j++) {
s3[count++] = s1[j % len1];
}
if (strcmp(s3, s2) == 0) {
ret = 1;
break;
}
}
}
if (ret)printf("Yes\n");
else printf("No\n");
}
return 0;
}