【剑指offer】76.左旋转字符串
总目录:
1.问题描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc”
数据范围:输入的字符串长度满足 0≤len≤100, 0≤n≤100
进阶:空间复杂度 O(n),时间复杂度 O(n)
2.问题分析
逐字符拼接是最简单的,一般考察的是三次翻转技巧
3.代码实例
三次翻转
1 class Solution { 2 public: 3 string LeftRotateString(string str, int n) { 4 int strLen = str.length(); 5 if (strLen <= 0) { 6 return str; 7 } 8 n %= strLen; 9 10 //第一次逆转全部数组元素 11 reverse(str.begin(), str.end()); 12 //第二次只逆转开头strLen - n个 13 reverse(str.begin(), str.begin() + strLen - n); 14 //第三次只逆转结尾n个 15 reverse(str.end() - n, str.end()); 16 17 return str; 18 } 19 };