【剑指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 };

 

posted @ 2022-12-06 20:40  啊原来是这样呀  阅读(24)  评论(0编辑  收藏  举报