旋转字符串
2014-07-22 16:47
204 查看
比如将串“ABCDEFG”以D为中心旋转,就相当将该串向左循环移位,直到第一个元素为D为止,最后得到新串“DEFGABC”。
1、逐个移动
BCDEFGA,
CDEFGAB
DEFGABC
2、三次翻转
要想方便的完成rotate操作,一个常见的技巧是这样的:先将前半部分反转,再将后半部分反转,最后再将整个串反转即可(这里的前半部分与后半部分是以旋转中心来划分的)。还是以串“ABCDEFG”以D为中心旋转为例,以D为分割点,将先半部分与后半部分分别反转后,得“CBAGFED”,最后将整个串反转即得“DEFGABC”。
第一次翻转:CBA DEFG
第二次翻转:CBA GFED
第三次翻转:DEFGABC
1、逐个移动
BCDEFGA,
CDEFGAB
DEFGABC
2、三次翻转
要想方便的完成rotate操作,一个常见的技巧是这样的:先将前半部分反转,再将后半部分反转,最后再将整个串反转即可(这里的前半部分与后半部分是以旋转中心来划分的)。还是以串“ABCDEFG”以D为中心旋转为例,以D为分割点,将先半部分与后半部分分别反转后,得“CBAGFED”,最后将整个串反转即得“DEFGABC”。
第一次翻转:CBA DEFG
第二次翻转:CBA GFED
第三次翻转:DEFGABC
#include <iostream> #include <string> #include <algorithm> using namespace std; void shift1(char *s,int n) { int len=strlen(s); char tmp; for(int i=0;i<n;i++) { tmp=s[0]; for(int j=0;j<len-1;j++) { s[j]=s[j+1]; } s[len-1]=tmp; } } void swap(char *p,int f,int b) { char s; while(f<b) { s=p[f]; p[f]=p[b]; p[b]=s; f++; b--; } } void shift2(char *p,int n) { int len=strlen(p); swap(p,0,n-1); swap(p,n,len-1); swap(p,0,len-1); } void main() { char p[100]; cin>>p; int len=strlen(p); int n=3; shift2(p,n); cout<<p<<endl; system("pause"); }
相关文章推荐
- 2016华为校招旋转字符串
- 写一个函数可以将一个字符串左旋转K个字符。
- LintCode-8.旋转字符串
- 九度OJ 1362 左旋转字符串(Move!Move!!Move!!!)【算法】
- 数组,链表,字符串 的旋转(未完待续)
- 判定两个字符串是否互为旋转词
- 42.翻转单词顺序VS左旋转字符串
- 剑指offer——左旋转字符串
- 算法题/翻转单词和左旋转字符串
- 剑指offer——左旋转字符串
- 字符串旋转
- 左旋转字符串
- 腾讯面试题--字符串旋转
- 判断子串和判断两个字符串是否由另一个旋转而来的问题
- 【100题】左旋转字符串-----整体翻转+局部再次翻转
- lintcode:旋转字符串
- 翻转单词顺序 VS 左旋转字符串
- 剑指offer之面试题42翻转单词顺序VS左旋转字符串
- 九章算法面试题55 旋转字符串
- 剑指Offer--042-左旋转字符串