汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
class Solution {
//步骤1:以n为界,将字符串分为两个子串
//步骤2:对两个子串分别进行翻转(调用两次翻转函数)
//步骤3:翻转整个字符串(调用1次翻转函数)
public:
//实现翻转功能
void Reverse(int begin, int end, string &str){
char temp;
while(begin < end){
temp = str[begin];
str[begin] = str[end];
str[end] = temp;
begin ++;
end --;
}
}
string LeftRotateString(string str, int n) {
// 定义字符串的长度len
int len = str.length();
//当字符串为空或者指定翻转的长度为0时直接返回原字符串
if(len < 1 || n == 0)
return str;
// 定义引用temp,它是变量str的引用,即别名
// temp与str实际上是一回事,表示的是同一块内存
string &temp = str;
//翻转前面n个字符
Reverse(0, n-1, temp);
//翻转后面的字符
Reverse(n, len-1, temp);
//翻转整个字符串
Reverse(0, len-1, temp);
//返回新的字符串
return str;
}
};