leetcode链接
示例 1:
输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:
输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”
思路:可以先对字符串进行整体反转,然后对区间[0,s.size()-n-1]内的字符串反转,对区间[s.size()-n,s.size()-1]内的字符串进行反转。是一种先整体反转,再局部反转的思想。当然也可以先局部,再整体。
代码:
class Solution {
public:
void reverse(string& s, int left, int right) {
while (left < right) {
swap(s[left], s[right]);
left++;
right--;
}
}
string reverseLeftWords(string s, int n) { //左旋转字符串
int left = 0, right = s.size() - 1;
reverse(s, left, right);
reverse(s, 0, s.size() - n - 1);
reverse(s, s.size() - n, s.size() - 1);
return s;
}
};
int main()
{
string s = "abcdefg";
int n = 3;
Solution solution;
string result = solution.reverseLeftWords(s, 3);
cout << result << endl;
return 0;
}



