题目
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2:
输入:s = "abcd", k = 2
输出:"bacd"
提示:
1 <= s.length <= 104
s
仅由小写英文组成1 <= k <= 104
解答
- 直接进行交换即可
class Solution {
public:
string reverseStr(string s, int k) {
int n = s.size(); // 字符串的长度
for (int i = 0; i < n; i += 2 * k) { // 每 2k 个字符为一组进行反转
int left = i; // 左边界
int right = min(i + k - 1, n - 1); // 右边界,注意防止越界
while (left < right) { // 双指针反转
swap(s[left], s[right]); // 交换左右指针对应的字符。
left++;
right--; // 左右指针向中间移动。
}
}
return s; // 返回反转后的字符串
}
};