基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
收藏
关注
S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。
现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。
Input
第1行:给出一个字符串(字符串非空串,只包含小写字母,长度不超过1000000)
Output
对于每个测试用例,输出结果占一行,如果能,输出YES,否则输出NO。
Input示例
aa
ab
Output示例
YES
NO
题意: 一开始看题意还以为要对字符串旋转呢,真坑,结果对"对串"分析一下就出来了.
1 #include <bits/stdc++.h> 2 #define N 1000005 3 using namespace std; 4 char k[N]; 5 int main(){ 6 while(~scanf("%s",k)){ 7 if(strlen(k)%2==1) 8 printf("NO "); 9 else{ 10 bool prime=true; 11 int ans=strlen(k)/2; 12 for(int i=0;i<ans;i++){ 13 if(k[i]!=k[i+ans]){ 14 prime=false; 15 break; 16 } 17 } 18 if(prime) 19 printf("YES "); 20 else 21 printf("NO "); 22 } 23 } 24 return 0; 25 }