541. Reverse String II #
题目 #
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
思路 #
代码 #
class Solution {
public void reversePart(char[] charArray, int left, int right) {
while (left < right) {
char temp = charArray[left];
charArray[left] = charArray[right];
charArray[right] = temp;
left += 1;
right -= 1;
}
}
public String reverseStr(String s, int k) {
char[] charArray = s.toCharArray();
int cycle = charArray.length / (2 * k);
for (int i=0; i<cycle; i++) {
int left = i * (2 * k), right = left + k - 1;
reversePart(charArray, left, right);
}
int reminder = charArray.length % (2 * k);
if (reminder < k) reversePart(charArray, cycle * (2 * k), cycle * (2 * k) + reminder - 1);
else reversePart(charArray, cycle * (2 * k), cycle * (2 * k) + k - 1);
return String.valueOf(charArray);
}
}