左旋转字符串_牛客题霸_牛客网
描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列 S ,请你把其循环左移 K 位后的序列输出。例如,字符序列 S = ”abcXYZdef” , 要求输出循环左移 3 位后的结果,即 “XYZdefabc”
数据范围:输入的字符串长度满足 0≤len≤100 0≤len≤100 , 0≤n≤100 0≤n≤100
进阶:空间复杂度 O(n) O(n) ,时间复杂度 O(n) O(n)
示例1
输入: "abcXYZdef",3
复制返回值:"XYZdefabc"
对应leetcode 189 思路和剑指offer-Page 287一样
1.先对str整个字符串进行翻转 fedZYXcba
2.对倒数第n个字符至str.end()这一区间进行翻转------>对cba进行翻转
3.对str.begin()至str.end()-n这一区间进行翻转。-------->对fedZYX进行翻转
#include <algorithm>
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param str string字符串
* @param n int整型
* @return string字符串
*/
string LeftRotateString(string str, int n) {
// write code here
if(str.empty()) return "";
n = n % str.size(); //输入的n可能大于size
//abcXYZdef
reverse(str.begin(), str.end());
//fedZYXcba
reverse(str.end() - n,str.end());
//fedZYXabc
reverse(str.begin(), str.end() - n);
return str;
}
};