基准时间限制:
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
思路:只要是旋转字符串,怎么旋转都是。直接判断输入串是不是就行了。
Code:
#include <bits/stdc++.h>
using namespace std;
const int AX = 1e6+666;
char a[AX];
int main(){
while( ~scanf("%s",a+1) ){
int len = strlen(a+1);
int flag ;
int l = len;
int n = len/2;
if( len % 2 == 0 ){
for( int i = 1 ; i <= n ; i++ ){
if( a[i] != a[i+n] ){
flag = 0;
break;
}else{
flag = 1;
}
}
}else{
flag = 0;
}
cout<<(flag == 1 ? "YES" : "NO")<<endl;
}
return 0;
}