51 nod 1347(旋转字符串)
2018-02-01 14:16
369 查看
1347 旋转字符串
S[0...n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。
现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。
Input
Output
Input示例
Output示例
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
PS:陷阱.... :一个对串怎么旋转都是对串,不是对串怎么旋转都不是对串...傻乎乎的按题目意思搞了半天.........感觉自己智商堪忧啊。
附ac代码:
#include <iostream> #include <string.h> #define max 1000000+5 using namespace std; char a[max],b[max],c[max]; int main() { while(scanf("%s",a)!=EOF) { int n=strlen(a); int m=n/2,i,ans=0,t=0; for(i=0; i<m; i++) b[i]=a[i]; for(i=m; i<n; i++) c[t++]=a[i]; if(strcmp(b,c)!=0) cout<<"NO"<<endl; else cout<<"YES"<<endl; } return 0; }
原代码.........:
#include <iostream> #include <cstring> #define max 1000000 + 5 using namespace std; char a[max],b[max],c[max]; void Left(char a[]) { char c=a[0]; int i,n=strlen(a); for(i=0; i<n-1; i++) { a[i]=a[i+1]; } a[n-1]=c; } int main() { while(scanf("%s",a)!=EOF) { int n=strlen(a); if(n%2==1) { cout<<"NO"<<endl; } else { int m=n/2,i,ans=0,t=0; for(i=0; i<m; i++) b[i]=a[i]; for(i=m; i<n; i++) c[]=a[i]; while(strcmp(b,c)!=0) { Left(a); ans++; if(ans>=m) break; } if(ans>=m) cout<<"NO"<<endl; else cout<<"YES"<<endl; } } return 0; }
相关文章推荐
- 51 nod 1347-旋转字符串
- 【剑指offer】左旋转字符串
- 51 Nod1182完美字符串
- 等快递无聊--旋转字符串
- 剑指Offer系列-面试题42:翻转单词顺序和左旋转字符串
- 牛客网剑指offer-左旋转字符串
- 51Nod 旋转字符串
- Flash/Flex学习笔记(51):3维旋转与透视变换(PerspectiveProjection)
- 左旋转字符串 (可能不是你想的那么简单)
- 字符串是否互为旋转
- 剑指offer面试题42_2 左旋转字符串
- 旋转字符串问题
- 算法十二----左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 我的字符串自左向右旋转学习
- 【面试题】字符串旋转
- java之左旋转字符串介绍
- 算法:字符串旋转
- [剑指offer]左旋转字符串