题目
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
示例 1:
输入: s = "abcdefg", k = 2 输出: "cdefgab"示例 2:
输入: s = "lrloseumgh", k = 6 输出: "umghlrlose"
限制:
1 <= k < s.length <= 10000
思路
左旋字符串
把字符串分为[0,n) [n,s.size()) 两段
分别翻转两段后 在翻转整个字符串
代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Solution {
public:
void reverseString(string& s, int left, int right) {
if (right - left + 1 <= 1)
return;
char temp;
while (left < right)
{
temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
}
string reverseLeftWords(string s, int n) {
reverseString(s, 0, n - 1);
reverseString(s, n, s.size() - 1);
reverseString(s, 0, s.size() - 1);
return s;
}
};
int main()
{
Solution so;
string s = "abcdefg";
so.reverseLeftWords(s, 2);
cout << s << endl;
system("pause");
}