leetcode_541 Solution

Reverse String II


给定字符串和一个整数k
每2k个长度,reverse 前 k 个字符,然后后k 个保持不变
如果最后剩下了 小于 k 个长度,那么就全部 reverse

Solution

这一种思路就是直接拿 stringbuilder append

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class {
public String reverseStr(String s, int k) {
int len = s.length();
int times = len / (2*k);
StringBuilder sb = new StringBuilder();
int j = 1;
while(j <= times) {
int index = k + (j-1) * 2 * k - 1;
int i = k;
// length = k
while(i > 0) {
sb.append(s.charAt(index));
i--;
index--;
}
// not reverse part
// length == k
i = k;
index = k + (j-1) * 2 * k;
while(i > 0) {
sb.append(s.charAt(index));
i--;
index++;
}
j++;
}
// reverse
int index = Math.min(times * 2 * k + k - 1, s.length() - 1);
while(index >= (times * 2 * k ) ) {
sb.append(s.charAt(index));
index--;
}
// append what is left
index = Math.min(times * 2 * k + k, s.length());
while(index < s.length()){
sb.append(s.charAt(index));
index++;
}
return sb.toString();
}
}