面试题42-2:左旋转字符串
2016-06-08 14:30
267 查看
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
ab|cdef –> fedc|ba –>cdef|ab
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部,如把字符串abcdef左旋转2位得到字符串cdefab。
请实现字符串左旋转的函数,要求对长度为n的字符串操作的时间复杂度为O(n),空间复杂度为O(1)。
ab|cdef –> fedc|ba –>cdef|ab
#include <cassert> #include <iostream> using namespace std; void swap(char *a, char *b) { char tmp = *a; *a = *b; *b = tmp; } void rotate_string(char *first, char *last) { assert(first != NULL && last != NULL); while (first < last){ swap(first, last); first++; last--; } } void rotate_string(char *str) { assert(str !=NULL); char *first = str; char *last = str; while (*last != '\0'){ last++; } last--; rotate_string(first, last); } void left_rotate_string(char *str, int pos) { rotate_string(str); char *first = str; char *last = str; while (*last != '\0'){ last++; } char *mid = last; for (int i = 0; i < pos; i++){ mid--; } last--; mid--; rotate_string(first, mid); mid++; rotate_string(mid, last); }
相关文章推荐
- 程序员该何去何从?
- 程序员的出路-追求卓越,有计划、有目标高效的做事情
- 总结程序员成长的几个阶段的心态
- .NET面试.NET Framework 各个版本的区别
- 高级Android工程师面试回忆录
- 面试(1)-java-se-字符串
- 高效程序员的7个习惯
- 黑马程序员:WWDC大会就要先睹为快
- iOS-面试秘籍
- .Net 常见面试题
- 天下熙熙皆为利来,天下攘攘皆为利往
- 面试题出错
- 黎活明给程序员的忠告
- 程序员福利:各大平台免费接口,非常实用
- 十道海量数据处理面试题与十个方法大总结
- 谈谈 BATJ3 面试
- sql常见面试题(1)
- 面试中关于Java你所需知道的的一切
- 写给程序员的管理入门课
- 面试中关于Java你所需知道的的一切