541. Reverse String II
Easy
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]
每隔k
个字符就翻转k
个字符
Java
class Solution {
public String reverseStr(String S, int k) {
char[] s = S.toCharArray();
int length = S.length();
for (int i=0; i<=length; i += 2*k) {
if(i + k > length){
reverse(s, i, length - 1);
}else{
reverse(s, i, i+k-1);
}
}
return new String(s);
}
public void reverse(char[] str, int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
}
Python
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s_list = []
rng = 2*k
for i in range(0, len(s), rng):
x = s[i: i+rng]
r_s = x[:k]
o_s = x[k:]
s_list.append(r_s[::-1])
s_list.append(o_s)
return ''.join(s_list)