面试题21:旋转字符串(艺术)
2015-12-16 17:02
363 查看
题目:
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面2个字符“ab”移动字符串的尾部,使得元字符串变成“cdefab”。
要求时间复杂度:O(n)
空间复杂度:O(1)
思路:
可以利用3步反转法。
第一步:将前面的字符串反转;
第二步:将后面的字符串反转;
第三步:将整个字符串反转。
给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面2个字符“ab”移动字符串的尾部,使得元字符串变成“cdefab”。
要求时间复杂度:O(n)
空间复杂度:O(1)
思路:
可以利用3步反转法。
第一步:将前面的字符串反转;
第二步:将后面的字符串反转;
第三步:将整个字符串反转。
#include <iostream> #include <vector> #include <string> #include <stack> #include <algorithm> using namespace std; void ReverseSubString(string &str, int first,int last) { while (first < last) { swap(str[first++], str[last--]); } } void ReverseString(string &str, int n) { int size = str.size(); if (n == 0 || size < n) return; ReverseSubString(str, 0, n - 1); ReverseSubString(str, n, size - 1); ReverseSubString(str, 0, size - 1); } int main() { string str("abcdef"); ReverseString(str, 2); cout << str << endl; return 0; }
相关文章推荐
- 前端面试题汇总
- 黑马程序员_java基础_泛型、集合框架工具类
- 程序员 身边的趣事
- 面试题20:树的子结构(offer)
- 程序员面试宝典1
- 黑马程序员_java基础_其他对象
- 黑马程序员_java多线程
- 黑马程序员_java API-String&&StringBuffer
- 黑马程序员_java数组的应用
- 黑马程序员_java判断与循环语句
- 程序员常去的6个技术干货聚合类网站
- 黑马程序员_java数组排序、查找、置换
- 黑马程序员——第十四篇: 打印流、随机读写、对象序列化、多线程
- 黑马程序员_java进制转换
- 黑马程序员——第十三篇:字符缓冲流、IO流练习、其他流对象
- 黑马程序员——第十二篇:字节流、字符流
- 黑马程序员_java运算符
- 黑马程序员——第十一篇:File类、方法递归、Io流
- 面试题19:合并两个排序的链表(offer)
- 面试题18:反转链表