Question 7 Reverse String II
Middle Level:
找一个k size的sliding window
如果left出界,表示结束了
如果right出界,表示全部reverse
根据情况选择是否reverse
// Some code
```java
/*
Clarification & Assumption
- input: String
- output: string with reverse
- example: abcdefg ---> bacdfeg
High Level:
- keep a k length sliding window, reverse its inside and do it iterate
Middle Level:
- two index left, right
- left: beginning of the sliding window, which should be reversed
- right: the end of the sliding window which should be reversed, = min (left + k - 1 , s.length())
- check until left larger than length, each time left + 2* k;
- reverse string function
*/
class Solution {
public String reverseStr(String s, int k) {
// sanity check
if (s == null || s.length() == 0) {
return s;
}
if (k < 0) {
throw new IllegalArgumentException();
}
char[] charString = s.toCharArray();
int left = 0;
int right = 0;
while (left < s.length() - 1) {
right = Math.min(left + k - 1, s.length() - 1);
reverse(charString, left, right);
left += 2 * k;
}
return new String(charString);
}
private void reverse(char[] charString, int i, int j) {
while (i < j) {
char temp = charString[i];
charString[i] = charString[j];
charString[j] = temp;
i++;
j--;
}
}
```
Last updated