File tree Expand file tree Collapse file tree 6 files changed +269
-3
lines changed
solution/0100-0199/0186.Reverse Words in a String II Expand file tree Collapse file tree 6 files changed +269
-3
lines changed Original file line number Diff line number Diff line change 23
23
24
24
<p ><strong >进阶:</strong >使用  ; <em >O</em >(1) 额外空间复杂度的原地解法。</p >
25
25
26
-
27
26
## 解法
28
27
29
28
<!-- 这里可写通用的实现逻辑 -->
30
29
30
+ 先翻转里面每个单词,最后再将字符串整体翻转。
31
+
31
32
<!-- tabs:start -->
32
33
33
34
### ** Python3**
34
35
35
36
<!-- 这里可写当前语言的特殊实现逻辑 -->
36
37
37
38
``` 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 )
39
59
```
40
60
41
61
### ** Java**
42
62
43
63
<!-- 这里可写当前语言的特殊实现逻辑 -->
44
64
45
65
``` 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
+ ```
46
115
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
+ }
47
139
```
48
140
49
141
### ** ...**
Original file line number Diff line number Diff line change 37
37
### ** Python3**
38
38
39
39
``` 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 )
41
60
```
42
61
43
62
### ** Java**
44
63
45
64
``` 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
+ ```
46
114
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
+ }
47
138
```
48
139
49
140
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 )
You can’t perform that action at this time.
0 commit comments