Sorry, your browser cannot access this site
This page requires browser support (enable) JavaScript
Learn more >

反转字符串II

力扣题号541

题目描述:

1
2
3
4
5
6
7
8
9
10
11
12
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1

输入:s = "abcdefg", k = 2
输出:"bacdfeg"
示例 2

输入:s = "abcd", k = 2
输出:"bacd"

题目描述的比较清晰

  • 从2k个字符就要反转这2k字符中前k个字符
  • 剩余字符少于k个,反转所有剩余字符
  • 剩余字符小于2k但大于等于k则反正剩余字符的前k个字符
反转字符II
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public String reverseStr(String s, int k) {
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i = i + (2 * k)) {
if (i + k < chars.length){
reverse(chars, i, i+k -1);
continue;
}
reverse(chars, i, chars.length - 1);
}
return new String(chars);
}

public void reverse(char[] arr, int left, int right) {
while (left < right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}

评论