思路:
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;
}
};