题目描述
我们把一个字符串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
思路: 通过遍历a字符串找b字符串的首字母再分别顺时针逆时针判断是否一致,不一致flag标志为0退出对比,每次对照后恢复标志为1;
求助:案例带入均正确,提交有问题,有大佬指一下问题吗
#include<stdio.h>
#include<string.h>
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char a[100],b[100];
scanf("%s",a);
scanf("%s",b);
int len1 = strlen(a) ;
int len = strlen(b);
int flag = 1;//标志可以找到
int f = 0;
for(int j = 0;j<len1;j++)//遍历字符串a
{
int i = 0;//在a中找字符串b的首字母
if(a[j]==b[i])
{
for(int i = 1;i<len;i++)
{
if(a[(j+i)%len1]!=b[i])//顺时针
{
flag = 0;
break;
}
}
if(flag==1)
{
printf("Yes\n");
f = 1;
break;
}
else
flag = 1;//恢复
for(int i = 1;i<len;i++)
{
if(a[(j-i+len1)%len1]!=b[i])//逆时针
{
flag = 0;
break;
}
}
if(flag==1)
{
printf("Yes\n");
f = 1;
break;
}
else
flag = 1;//恢复
}
}
if(f!=1)
printf("No\n");
}
}