题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!

思路:本题思路跟旋转字符串有点类似。先将字符串整体进行反转,然后再反转前一部分和后一部分。

class Solution {
public:
string LeftRotateString(string str, int n) {
if(str==""||n<1)
return str;
reverse(str.begin(),str.end());
int length=str.size();
reverse(str.begin(),str.begin()+length-n);//反转前一部分
reverse(str.begin()+length-n,str.end());//反转后一部分
return str;
}
};

思路2:先将后一部分字符一次添加到res上,然后再将前n个字符添加到res上,实现字符串的左旋操作

class Solution {
public:
string LeftRotateString(string str, int n) {
if(str.empty()||n<1)
return str;
string res="";
for(int i=n;i<str.size();i++)
res+=str[i];
for(int i=0;i<n;i++)
res+=str[i];
return res;
}
};