Description
强迫症非常麻烦,尤其是买东西的时候。冠璐女神的生日快到了,某强迫症要送一条项链送给她,重点是,这条项链要对称,这条项链要对称,这条项链要对称。(很重要所以说三遍)
项链都是环状的(废话...),每条项链上有颜色不同的珍珠,用小写字母 a−z 代表不同的颜色。一条项链是对称的,是指从项链的某个位置开始,两个方向看过去是一样的(珍珠的颜色一样)。
比方说,如图所示的项链(第一个输入样例),从箭头位置开始看,无论是顺时针还是逆时针,看到的都是ababbaba,因此这条项链是对称的。
有的项链非常长,很难看出它们的对称性。你能快速地判断哪些项链是对称的吗?
Input
第一行有一个整数N,表示一共有N条项链。
接下来N行,每行一个由小写字母组成的字符串,代表项链上珍珠的颜色,可能从项链的任意位置开始。
Output
输出N行,如果项链是对称的,输出YES,否则输出NO。
Sample Input
3 abbabaab abab abcdefg
Sample Output
YES YES NO
我原来以为这就是一个回文字符串,后来看了样例就知道我的思路错了,
然后我也没办法只能暴力,把所有可能都过一遍
#include <bits/stdc++.h>
using namespace std;
char a[100010];
int main()
{
int n,j,k,i,t;
cin>>n;
for(t=1;t<=n;t++)
{
cin>>a;
for(i=0;i<strlen(a);i++)
{
for(j=0,k=i;j<strlen(a);j++,k--)
{
if(k<0)
k=strlen(a)-1;
if(a[j]!=a[k])
break;
}
if(j==strlen(a))
break;
}
双重循环,把所有字母都找一遍
if(j==strlen(a))
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
接下来前方高能
!
!
!
!
!
!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
string s,z;
scanf("%d",&n);
while(n--)
{
cin>>s;
z=s+s;
reverse(z.begin(),z.end());
printf("%s\n",strstr(z.c_str(),s.c_str())?"YES":"NO");
}
这是我找到的大佬的代码
我只能说
这什么鬼代码
表示承受不住,甚至想学习