## 题目描述

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:

1. The string consists of lower English letters only.
2. Length of the given string and k will in the range [1, 10000]

## 解法一

### 思路

``````for (int i = 0; i < length; i += 2 * k) {
if (i + k >= length) {
reverse(str, i, length - 1);
} else {
reverse(str, i, i + k - 1);
}
}``````

`reverse(str, start, end)`就是简单的反转字符串了。

### Python

``````class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
length = len(s)
for i in range(0, length, 2 * k):
if i + k >= length:
s = s[:i] + s[i:][::-1]
else:
s = s[:i] + s[i:i + k][::-1] + s[i + k:]
return s``````

### Java

``````public class Solution {
public String reverseStr(String s, int k) {
class Utils {
void reverse(char[] str, int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
}
Utils utils = new Utils();
int length = s.length();
char[] str = s.toCharArray();
for (int i = 0; i < length; i += 2 * k) {
if (i + k >= length) {
utils.reverse(str, i, length - 1);
} else {
utils.reverse(str, i, i + k - 1);
}
}
return new String(str);
}
}``````

### C++

``````class Solution {
public:
string reverseStr(string s, int k) {
class Utils {
public:
void reverse(string &str, int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
};
Utils utils;
int length = s.length();
for (int i = 0; i < length; i += 2 * k) {
if (i + k >= length) {
utils.reverse(s, i, length - 1);
} else {
utils.reverse(s, i, i + k - 1);
}
}
return s;
}
};``````