Description#
Given a string s
and an integer k
, reverse the first k
characters for every 2k
characters counting from the start of the string.
If there are fewer 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 leave the other as original.
Example 1:
Input: s = "abcdefg", k = 2
Output: "bacdfeg"
Example 2:
Input: s = "abcd", k = 2
Output: "bacd"
Constraints:
1 <= s.length <= 104
s
consists of only lowercase English letters.1 <= k <= 104
Solutions#
Solution 1#
1
2
3
4
5
6
| class Solution:
def reverseStr(self, s: str, k: int) -> str:
t = list(s)
for i in range(0, len(t), k << 1):
t[i : i + k] = reversed(t[i : i + k])
return ''.join(t)
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i += (k << 1)) {
for (int st = i, ed = Math.min(chars.length - 1, i + k - 1); st < ed; ++st, --ed) {
char t = chars[st];
chars[st] = chars[ed];
chars[ed] = t;
}
}
return new String(chars);
}
}
|
1
2
3
4
5
6
7
8
9
| class Solution {
public:
string reverseStr(string s, int k) {
for (int i = 0, n = s.size(); i < n; i += (k << 1)) {
reverse(s.begin() + i, s.begin() + min(i + k, n));
}
return s;
}
};
|
1
2
3
4
5
6
7
8
9
| func reverseStr(s string, k int) string {
t := []byte(s)
for i := 0; i < len(t); i += (k << 1) {
for st, ed := i, min(i+k-1, len(t)-1); st < ed; st, ed = st+1, ed-1 {
t[st], t[ed] = t[ed], t[st]
}
}
return string(t)
}
|