剑指offer58.2 左旋转字符串
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
请定义一个函数实现字符串左旋转操作的功能。
比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。
注意:
数据保证n小于等于输入字符串的长度。
样例
输入:"abcdefg" , n=2
输出:"cdefgab"
思路1:
用C++库,很简单可直接看代码
AcWing-78 C++ code:
class Solution {
public:
string leftRotateString(string str, int n) {
if(str.size() == 0 || n == 0){
return str;
}
for(int i = 0; i < n; i++){
char temp = str[0];
str.erase(str.begin());
str += temp;
}
return str;
}
};
思路2:
先反转前面要后移的字符串,再反转后面要前移的字符串,再反转整个的字符串。
AcWing-78 C++ code:
class Solution {
public:
void reverse(string &str, int left, int right){
char temp;
while(right > left){
temp = str[right];
str[right] = str[left];
str[left] = temp;
left++;
right--;
}
}
string leftRotateString(string str, int n) {
if(str.size() == 0 || n < 1){
return str;
}
reverse(str, 0, n - 1);
reverse(str, n, str.size() - 1);
reverse(str, 0, str.size() - 1);
return str;
}
};