0541. Reverse String II
https://leetcode.com/problems/reverse-string-ii
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 left 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
ac
class Solution {
public String reverseStr(String s, int k) {
// edge cases
if (s.length() <= 1 || k <= 1) return s;
char[] chars = s.toCharArray();
int l = 0, i = 0;
do {
i += 2 * k;
int r = Math.min(l + k - 1, s.length() - 1); // elegant
reverse(chars, l, r);
l = i;
} while (i < s.length());
return String.valueOf(chars);
}
private void reverse(char[] chars, int left, int right) {
while (left < right) {
char tmp = chars[left];
chars[left++] = chars[right];
chars[right--] = tmp;
}
}
}
Last updated
Was this helpful?