Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less than k characters left, reverse all of them. If there are less than 2k but greater than or equal to k characters, then reverse the first k characters and left the other as original.
Example:
Input: s = "abcdefg", k = 2 Output: "bacdfeg"Restrictions:
- The string consists of lower English letters only.
- Length of the given string and k will in the range [1, 10000]
每2k个字符reverse前k个,不足k就都reverse,大于k小于2k reverse前k个。
1 遍历数组,看当前的下标如果是2k的倍数就设置start = i,end = i+k
2如果end>string长度,就reverse [start, len - 1],不然就reverse[start, end - 1]
3需要自己写一个reverse函数这样可以直接在string一段一段地reverse。
4处理corner case,len<=1时直接return s
代码如下:
class Solution {
public:
void reverse(string &s, int start, int end) {
char c;
while (start < end) {
c = s[start];
s[start] = s[end];
s[end] = c;
start++;
end--;
}
}
string reverseStr(string s, int k) {
int len = s.size();
if (len <= 1) return s;
int start, end;
for (int i = 0; i < len; i++) {
if (i % (2*k) == 0) {
start = i;
end = i + k;
if (end > len) {
reverse(s, start, len - 1);
}
else reverse(s, start, end - 1);
}
}
return s;
}
};