题目描述:
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
完整代码:
class Solution {
public:
string LeftRotateString(string str, int n) {
//如果字符串不为空
if(!(str.length() <= 0))
{
//声明一个变量表示字符串的长度
int length = str.length();
//如果字符串长度不为 0 且 n 大于 0 且 n < length
if(length > 0 && n > 0 && n <length)
{
//声明变量表示前一部分的开头和结尾
int pBegin1 = 0;
int pEnd1 = n - 1;
//声明一个变量表示后一部分的开头和结尾
int pBegin2 = n;
int pEnd2 = length - 1;
//翻转前一部分字符串
Reverse(str, pBegin1, pEnd1);
//翻转后一部分字符串
Reverse(str,pBegin2, pEnd2);
//翻转整个字符串
Reverse(str, pBegin1, pEnd2);
}
}
return str;
}
private:
void Reverse(string& str, int num1, int num2)
{
//检查输入的合法性
if(num1 < 0 || num2 < 0)
return;
while(num1 < num2)
{
char temp = str[num1];
str[num1] = str[num2];
str[num2] = temp;
num1++;
num2--;
}
}
};