思路:
2k个字符中前k个翻转
如果字符正好2k个,那就去翻转前k个,如果字符不足2k个,那取前K个翻转
因此先写翻转函数,再按着要求翻转
注意边界条件,反转k个,下标是i+k-1,例如0-3是前4个,反转前两个,是0-1
void reverse(string &s,int start,int end)
{//实现的功能是,ij之间的内容翻转for(int i = start,j = end;start<end;i++,j--){swap(s[i],s[j]);}
}
class Solution {
public:void reverse(string& s, int start, int end) {for (int i = start, j = end; i < j; i++, j--) {swap(s[i], s[j]);}}string reverseStr(string s, int k) {for (int i = 0; i < s.size(); i += (2 * k)) {// 1. 每隔 2k 个字符的前 k 个字符进行反转// 2. 剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符if (i + k <= s.size()) {reverse(s, i, i + k - 1);continue;}// 3. 剩余字符少于 k 个,则将剩余字符全部反转。reverse(s, i, s.size() - 1);}return s;}
};