Skip to content

Commit 7eb91c4

Browse files
committed
feat: add solutions to lc problem: No.0186. Reverse Words in a String II
1 parent 767a639 commit 7eb91c4

File tree

6 files changed

+269
-3
lines changed

6 files changed

+269
-3
lines changed

solution/0100-0199/0186.Reverse Words in a String II/README.md

Lines changed: 94 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,27 +23,119 @@
2323

2424
<p><strong>进阶:</strong>使用&nbsp;<em>O</em>(1) 额外空间复杂度的原地解法。</p>
2525

26-
2726
## 解法
2827

2928
<!-- 这里可写通用的实现逻辑 -->
3029

30+
先翻转里面每个单词,最后再将字符串整体翻转。
31+
3132
<!-- tabs:start -->
3233

3334
### **Python3**
3435

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

3738
```python
38-
39+
class Solution:
40+
def reverseWords(self, s: List[str]) -> None:
41+
"""
42+
Do not return anything, modify s in-place instead.
43+
"""
44+
def reverse(s, i, j):
45+
while i < j:
46+
s[i], s[j] = s[j], s[i]
47+
i += 1
48+
j -= 1
49+
50+
i, j, n = 0, 0, len(s)
51+
while j < n:
52+
if s[j] == ' ':
53+
reverse(s, i, j - 1)
54+
i = j + 1
55+
elif j == n - 1:
56+
reverse(s, i, j)
57+
j += 1
58+
reverse(s, 0, n - 1)
3959
```
4060

4161
### **Java**
4262

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

4565
```java
66+
class Solution {
67+
public void reverseWords(char[] s) {
68+
int n = s.length;
69+
for (int i = 0, j = 0; j < n; ++j) {
70+
if (s[j] == ' ') {
71+
reverse(s, i, j - 1);
72+
i = j + 1;
73+
} else if (j == n - 1) {
74+
reverse(s, i, j);
75+
}
76+
}
77+
reverse(s, 0, n - 1);
78+
}
79+
80+
private void reverse(char[] s, int i, int j) {
81+
for (; i < j; ++i, --j) {
82+
char t = s[i];
83+
s[i] = s[j];
84+
s[j] = t;
85+
}
86+
}
87+
}
88+
```
89+
90+
### **C++**
91+
92+
```cpp
93+
class Solution {
94+
public:
95+
void reverseWords(vector<char>& s) {
96+
int n = s.size();
97+
for (int i = 0, j = 0; j < n; ++j) {
98+
if (s[j] == ' ') {
99+
reverse(s, i, j - 1);
100+
i = j + 1;
101+
} else if (j == n - 1) {
102+
reverse(s, i, j);
103+
}
104+
}
105+
reverse(s, 0, n - 1);
106+
}
107+
108+
void reverse(vector<char>& s, int i, int j) {
109+
for (; i < j; ++i, --j) {
110+
swap(s[i], s[j]);
111+
}
112+
}
113+
};
114+
```
46115

116+
### **Go**
117+
118+
```go
119+
func reverseWords(s []byte) {
120+
n := len(s)
121+
for i, j := 0, 0; j < n; j++ {
122+
if s[j] == ' ' {
123+
reverse(s, i, j-1)
124+
i = j + 1
125+
} else if j == n-1 {
126+
reverse(s, i, j)
127+
}
128+
}
129+
reverse(s, 0, n-1)
130+
}
131+
132+
func reverse(s []byte, i, j int) {
133+
for i < j {
134+
s[i], s[j] = s[j], s[i]
135+
i++
136+
j--
137+
}
138+
}
47139
```
48140

49141
### **...**

solution/0100-0199/0186.Reverse Words in a String II/README_EN.md

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,104 @@
3737
### **Python3**
3838

3939
```python
40-
40+
class Solution:
41+
def reverseWords(self, s: List[str]) -> None:
42+
"""
43+
Do not return anything, modify s in-place instead.
44+
"""
45+
def reverse(s, i, j):
46+
while i < j:
47+
s[i], s[j] = s[j], s[i]
48+
i += 1
49+
j -= 1
50+
51+
i, j, n = 0, 0, len(s)
52+
while j < n:
53+
if s[j] == ' ':
54+
reverse(s, i, j - 1)
55+
i = j + 1
56+
elif j == n - 1:
57+
reverse(s, i, j)
58+
j += 1
59+
reverse(s, 0, n - 1)
4160
```
4261

4362
### **Java**
4463

4564
```java
65+
class Solution {
66+
public void reverseWords(char[] s) {
67+
int n = s.length;
68+
for (int i = 0, j = 0; j < n; ++j) {
69+
if (s[j] == ' ') {
70+
reverse(s, i, j - 1);
71+
i = j + 1;
72+
} else if (j == n - 1) {
73+
reverse(s, i, j);
74+
}
75+
}
76+
reverse(s, 0, n - 1);
77+
}
78+
79+
private void reverse(char[] s, int i, int j) {
80+
for (; i < j; ++i, --j) {
81+
char t = s[i];
82+
s[i] = s[j];
83+
s[j] = t;
84+
}
85+
}
86+
}
87+
```
88+
89+
### **C++**
90+
91+
```cpp
92+
class Solution {
93+
public:
94+
void reverseWords(vector<char>& s) {
95+
int n = s.size();
96+
for (int i = 0, j = 0; j < n; ++j) {
97+
if (s[j] == ' ') {
98+
reverse(s, i, j - 1);
99+
i = j + 1;
100+
} else if (j == n - 1) {
101+
reverse(s, i, j);
102+
}
103+
}
104+
reverse(s, 0, n - 1);
105+
}
106+
107+
void reverse(vector<char>& s, int i, int j) {
108+
for (; i < j; ++i, --j) {
109+
swap(s[i], s[j]);
110+
}
111+
}
112+
};
113+
```
46114

115+
### **Go**
116+
117+
```go
118+
func reverseWords(s []byte) {
119+
n := len(s)
120+
for i, j := 0, 0; j < n; j++ {
121+
if s[j] == ' ' {
122+
reverse(s, i, j-1)
123+
i = j + 1
124+
} else if j == n-1 {
125+
reverse(s, i, j)
126+
}
127+
}
128+
reverse(s, 0, n-1)
129+
}
130+
131+
func reverse(s []byte, i, j int) {
132+
for i < j {
133+
s[i], s[j] = s[j], s[i]
134+
i++
135+
j--
136+
}
137+
}
47138
```
48139

49140
### **...**
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
void reverseWords(vector<char>& s) {
4+
int n = s.size();
5+
for (int i = 0, j = 0; j < n; ++j) {
6+
if (s[j] == ' ') {
7+
reverse(s, i, j - 1);
8+
i = j + 1;
9+
} else if (j == n - 1) {
10+
reverse(s, i, j);
11+
}
12+
}
13+
reverse(s, 0, n - 1);
14+
}
15+
16+
void reverse(vector<char>& s, int i, int j) {
17+
for (; i < j; ++i, --j) {
18+
swap(s[i], s[j]);
19+
}
20+
}
21+
};
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
func reverseWords(s []byte) {
2+
n := len(s)
3+
for i, j := 0, 0; j < n; j++ {
4+
if s[j] == ' ' {
5+
reverse(s, i, j-1)
6+
i = j + 1
7+
} else if j == n-1 {
8+
reverse(s, i, j)
9+
}
10+
}
11+
reverse(s, 0, n-1)
12+
}
13+
14+
func reverse(s []byte, i, j int) {
15+
for i < j {
16+
s[i], s[j] = s[j], s[i]
17+
i++
18+
j--
19+
}
20+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public void reverseWords(char[] s) {
3+
int n = s.length;
4+
for (int i = 0, j = 0; j < n; ++j) {
5+
if (s[j] == ' ') {
6+
reverse(s, i, j - 1);
7+
i = j + 1;
8+
} else if (j == n - 1) {
9+
reverse(s, i, j);
10+
}
11+
}
12+
reverse(s, 0, n - 1);
13+
}
14+
15+
private void reverse(char[] s, int i, int j) {
16+
for (; i < j; ++i, --j) {
17+
char t = s[i];
18+
s[i] = s[j];
19+
s[j] = t;
20+
}
21+
}
22+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution:
2+
def reverseWords(self, s: List[str]) -> None:
3+
"""
4+
Do not return anything, modify s in-place instead.
5+
"""
6+
def reverse(s, i, j):
7+
while i < j:
8+
s[i], s[j] = s[j], s[i]
9+
i += 1
10+
j -= 1
11+
12+
i, j, n = 0, 0, len(s)
13+
while j < n:
14+
if s[j] == ' ':
15+
reverse(s, i, j - 1)
16+
i = j + 1
17+
elif j == n - 1:
18+
reverse(s, i, j)
19+
j += 1
20+
reverse(s, 0, n - 1)

0 commit comments

Comments
 (0)