反转字符串Ⅱ

541. 反转字符串 II - 力扣(LeetCode)

给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。

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

示例 1:

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

示例 2:

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

提示:

  • 1 <= s.length <= 104
  • s 仅由小写英文组成
  • 1 <= k <= 104

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public String reverseStr(String s, int k) {
char[] charArray = s.toCharArray();
for(int i = 0; i < charArray.length; i += 2*k){
if(i + k <= charArray.length){ //剩余元素大于等于k个
reverse(charArray, i, i + k-1); //前k个反转
}else{//剩余元素小于k个
reverse(charArray,i, charArray.length-1);//全部反转
}
}
return new String(charArray);
}
public void reverse(char[] s, int l, int r){
while(l < r){
char tmep = s[l];
s[l] = s[r];
s[r]= tmep;
l++;
r--;
}
}
}

反转字符串Ⅱ
http://example.com/2023/03/06/算法/字符串/1. 反转字符串 II/
作者
PALE13
发布于
2023年3月6日
许可协议