1347 旋转字符串
基准时间限制: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 abOutput示例YES NO
对串不管旋转多少次形成的串都是对串。如:
abcabc旋转一次--cabcab依旧是对串。
简单判断一下给定的字符串就可以。
附AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 4 int main(){ 5 string s; 6 cin>>s; 7 int len=s.size(); 8 if(len%2){ 9 cout<<"NO"<<endl; 10 return 0; 11 } 12 int half=len/2; 13 int temp=half; 14 int flag=0,ans=0; 15 for(int i=0;i<half;i++){ 16 if(s[i]==s[temp++]) 17 ans++; 18 if(ans==half){ 19 flag=1; 20 } 21 } 22 if(flag){ 23 cout<<"YES"<<endl; 24 } 25 else{ 26 cout<<"NO"<<endl; 27 } 28 return 0; 29 }