【8】左旋转字符串
2014-05-25 17:21
204 查看
题目:字符串的左旋转指的是把字符串前面若干个字符转移到字符串的尾部。例如输入字符串"abcdefg"和2,左旋转的结果就是"cdefgab"
方案一:常规作法利用一个O(n)的辅助空间,在利用O(n)的时间枚举字符串把字符串重新存储到新的辅助空间中。
方案二:先把字符串分成两部分,例如题目中分成"ab"和"cdefg";对这两部分进行翻转得到字符串"bagfedc";对整个字符串进行翻转得到"cdefgab",这样就完成字符串的左旋转。时间复杂度O(n),不需要辅助空间,效率高
方案一:常规作法利用一个O(n)的辅助空间,在利用O(n)的时间枚举字符串把字符串重新存储到新的辅助空间中。
方案二:先把字符串分成两部分,例如题目中分成"ab"和"cdefg";对这两部分进行翻转得到字符串"bagfedc";对整个字符串进行翻转得到"cdefgab",这样就完成字符串的左旋转。时间复杂度O(n),不需要辅助空间,效率高
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; //翻转单词 void ReverseWord(char *begin, char *end){ if(begin == NULL || end == NULL){ return; } //翻转 while(begin < end){ swap(*begin, *end);//交换两个位置的字符 ++begin; --end; } } //左旋转字符串 char *LeftRotateString(char *string, int k){ if(string == NULL || k <= 0){ return string; } int len = (int)strlen(string); char *begin = string; char *end = string+len-1; if(k > len){ //k不合法 return NULL; } //三次旋转 ReverseWord(begin, begin+k-1); ReverseWord(begin+k, end); ReverseWord(begin, end); return string; } int main(){ //样例 char str[] = "abcdefg"; char *string = NULL; string = LeftRotateString(str, 2); cout<<string<<endl; getchar(); return 0; }
相关文章推荐
- 左旋转字符串
- 剑指offer_面试题42——左旋转字符串
- leetcode——Reverse Words in a String 旋转字符串中单词顺序(AC)
- LintCode:旋转字符串
- 【练习】左旋转字符串
- 剑指Offer之左旋转字符串(Move!Move!!Move!!!)
- 每天一道算法题17 左旋转字符串
- 【转载】左旋转字符串
- 翻转单词顺序vs左旋转字符串
- 经典的字符串操作的题目,左旋转,反序输出所有的单词
- 左旋转字符串
- 判断某个字符串是否为另一个字符串旋转之后得到的
- 每日一帖:数据结构与算法之字符串旋转
- 字符串的旋转,不废话,直接上代码。。。
- Python :左旋转字符串
- 剑指Offer——翻转单词顺序VS左旋转字符串
- 左旋转字符串
- 左旋转字符串
- 等快递无聊--旋转字符串
- 左旋转字符串