Skip to content

Commit 5932d02

Browse files
committed
feat: add solutions to lc problem: No.0541.Reverse String II
1 parent 6ae1eb2 commit 5932d02

File tree

6 files changed

+147
-22
lines changed

6 files changed

+147
-22
lines changed

solution/0500-0599/0541.Reverse String II/README.md

+54-1
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,68 @@
4242
<!-- 这里可写当前语言的特殊实现逻辑 -->
4343

4444
```python
45-
45+
class Solution:
46+
def reverseStr(self, s: str, k: int) -> str:
47+
t = list(s)
48+
for i in range(0, len(t), k << 1):
49+
t[i: i + k] = reversed(t[i: i + k])
50+
return ''.join(t)
4651
```
4752

4853
### **Java**
4954

5055
<!-- 这里可写当前语言的特殊实现逻辑 -->
5156

5257
```java
58+
class Solution {
59+
public String reverseStr(String s, int k) {
60+
char[] chars = s.toCharArray();
61+
for (int i = 0; i < chars.length; i += (k << 1)) {
62+
for (int st = i, ed = Math.min(chars.length - 1, i + k - 1); st < ed; ++st, --ed) {
63+
char t = chars[st];
64+
chars[st] = chars[ed];
65+
chars[ed] = t;
66+
}
67+
}
68+
return new String(chars);
69+
}
70+
}
71+
```
72+
73+
### **C++**
74+
75+
```cpp
76+
class Solution {
77+
public:
78+
string reverseStr(string s, int k) {
79+
for (int i = 0, n = s.size(); i < n; i += (k << 1))
80+
{
81+
reverse(s.begin() + i, s.begin() + min(i + k, n));
82+
}
83+
return s;
84+
}
85+
};
86+
```
5387
88+
### **Go**
89+
90+
```go
91+
func reverseStr(s string, k int) string {
92+
t := []byte(s)
93+
for i := 0; i < len(t); i += (k << 1) {
94+
for st, ed := i, min(i+k-1, len(t)-1); st < ed; st, ed = st+1, ed-1 {
95+
t[st], t[ed] = t[ed], t[st]
96+
}
97+
}
98+
return string(t)
99+
}
100+
101+
func min(a, b int) int {
102+
if a < b {
103+
return a
104+
}
105+
return b
106+
}
54107
```
55108

56109
### **...**

solution/0500-0599/0541.Reverse String II/README_EN.md

+54-1
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,66 @@
3333
### **Python3**
3434

3535
```python
36-
36+
class Solution:
37+
def reverseStr(self, s: str, k: int) -> str:
38+
t = list(s)
39+
for i in range(0, len(t), k << 1):
40+
t[i: i + k] = reversed(t[i: i + k])
41+
return ''.join(t)
3742
```
3843

3944
### **Java**
4045

4146
```java
47+
class Solution {
48+
public String reverseStr(String s, int k) {
49+
char[] chars = s.toCharArray();
50+
for (int i = 0; i < chars.length; i += (k << 1)) {
51+
for (int st = i, ed = Math.min(chars.length - 1, i + k - 1); st < ed; ++st, --ed) {
52+
char t = chars[st];
53+
chars[st] = chars[ed];
54+
chars[ed] = t;
55+
}
56+
}
57+
return new String(chars);
58+
}
59+
}
60+
```
61+
62+
### **C++**
63+
64+
```cpp
65+
class Solution {
66+
public:
67+
string reverseStr(string s, int k) {
68+
for (int i = 0, n = s.size(); i < n; i += (k << 1))
69+
{
70+
reverse(s.begin() + i, s.begin() + min(i + k, n));
71+
}
72+
return s;
73+
}
74+
};
75+
```
4276
77+
### **Go**
78+
79+
```go
80+
func reverseStr(s string, k int) string {
81+
t := []byte(s)
82+
for i := 0; i < len(t); i += (k << 1) {
83+
for st, ed := i, min(i+k-1, len(t)-1); st < ed; st, ed = st+1, ed-1 {
84+
t[st], t[ed] = t[ed], t[st]
85+
}
86+
}
87+
return string(t)
88+
}
89+
90+
func min(a, b int) int {
91+
if a < b {
92+
return a
93+
}
94+
return b
95+
}
4396
```
4497

4598
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public:
3+
string reverseStr(string s, int k) {
4+
for (int i = 0, n = s.size(); i < n; i += (k << 1))
5+
{
6+
reverse(s.begin() + i, s.begin() + min(i + k, n));
7+
}
8+
return s;
9+
}
10+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func reverseStr(s string, k int) string {
2+
t := []byte(s)
3+
for i := 0; i < len(t); i += (k << 1) {
4+
for st, ed := i, min(i+k-1, len(t)-1); st < ed; st, ed = st+1, ed-1 {
5+
t[st], t[ed] = t[ed], t[st]
6+
}
7+
}
8+
return string(t)
9+
}
10+
11+
func min(a, b int) int {
12+
if a < b {
13+
return a
14+
}
15+
return b
16+
}
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,13 @@
11
class Solution {
22
public String reverseStr(String s, int k) {
3-
if (k < 2) return s;
4-
StringBuilder sb = new StringBuilder();
5-
int length = s.length(), index = 0;
6-
while (index < length) {
7-
if (index + 2 * k <= length) {
8-
sb.append(reverse(s, index, index + k));
9-
sb.append(s.substring(index + k, index + 2 * k));
10-
index += 2 * k;
11-
} else if (index + k <= length){
12-
sb.append(reverse(s, index, index + k));
13-
sb.append(s.substring(index + k));
14-
break;
15-
} else {
16-
sb.append(reverse(s, index, length));
17-
break;
3+
char[] chars = s.toCharArray();
4+
for (int i = 0; i < chars.length; i += (k << 1)) {
5+
for (int st = i, ed = Math.min(chars.length - 1, i + k - 1); st < ed; ++st, --ed) {
6+
char t = chars[st];
7+
chars[st] = chars[ed];
8+
chars[ed] = t;
189
}
1910
}
20-
return sb.toString();
21-
}
22-
23-
private StringBuffer reverse(String s, int index, int end) {
24-
return new StringBuffer(s.substring(index, end)).reverse();
11+
return new String(chars);
2512
}
2613
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
class Solution:
2+
def reverseStr(self, s: str, k: int) -> str:
3+
t = list(s)
4+
for i in range(0, len(t), k << 1):
5+
t[i: i + k] = reversed(t[i: i + k])
6+
return ''.join(t)

0 commit comments

Comments
 (0)