Skip to content

Commit 9979b19

Browse files
authored
feat: add solutions to lc problems: No.0557,576 (#3967)
* No.0557.Reverse Words in a String III * No.0576.Out of Boundary Paths
1 parent 8da9ea5 commit 9979b19

17 files changed

+434
-444
lines changed

solution/0500-0599/0557.Reverse Words in a String III/README.md

+46-39
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,11 @@ tags:
5353

5454
<!-- solution:start -->
5555

56-
### 方法一
56+
### 方法一:模拟
57+
58+
我们可以将字符串 $\textit{s}$ 按照空格分割成单词数组 $\textit{words}$,然后将每个单词反转后再拼接成字符串。
59+
60+
时间复杂度 $O(n)$,空间复杂度 $O(n)$。其中 $n$ 为字符串 $\textit{s}$ 的长度。
5761

5862
<!-- tabs:start -->
5963

@@ -62,22 +66,19 @@ tags:
6266
```python
6367
class Solution:
6468
def reverseWords(self, s: str) -> str:
65-
return ' '.join([t[::-1] for t in s.split(' ')])
69+
return " ".join(t[::-1] for t in s.split())
6670
```
6771

6872
#### Java
6973

7074
```java
7175
class Solution {
7276
public String reverseWords(String s) {
73-
StringBuilder res = new StringBuilder();
74-
for (String t : s.split(" ")) {
75-
for (int i = t.length() - 1; i >= 0; --i) {
76-
res.append(t.charAt(i));
77-
}
78-
res.append(" ");
77+
String[] words = s.split(" ");
78+
for (int i = 0; i < words.length; ++i) {
79+
words[i] = new StringBuilder(words[i]).reverse().toString();
7980
}
80-
return res.substring(0, res.length() - 1);
81+
return String.join(" ", words);
8182
}
8283
}
8384
```
@@ -88,14 +89,16 @@ class Solution {
8889
class Solution {
8990
public:
9091
string reverseWords(string s) {
91-
for (int i = 0, n = s.size(); i < n; ++i) {
92-
int j = i;
93-
while (++j < n && s[j] != ' ')
94-
;
95-
reverse(s.begin() + i, s.begin() + j);
96-
i = j;
92+
stringstream ss(s);
93+
string t;
94+
string ans;
95+
while (ss >> t) {
96+
reverse(t.begin(), t.end());
97+
ans += t;
98+
ans.push_back(' ');
9799
}
98-
return s;
100+
ans.pop_back();
101+
return ans;
99102
}
100103
};
101104
```
@@ -104,18 +107,13 @@ public:
104107
105108
```go
106109
func reverseWords(s string) string {
107-
t := []byte(s)
108-
for i := 0; i < len(t); i++ {
109-
j := i
110-
for j < len(t) && t[j] != ' ' {
111-
j++
112-
}
113-
for st, ed := i, j-1; st < ed; st, ed = st+1, ed-1 {
114-
t[st], t[ed] = t[ed], t[st]
115-
}
116-
i = j
110+
words := strings.Fields(s)
111+
for i, w := range words {
112+
t := []byte(w)
113+
slices.Reverse(t)
114+
words[i] = string(t)
117115
}
118-
return string(t)
116+
return strings.Join(words, " ")
119117
}
120118
```
121119

@@ -124,14 +122,8 @@ func reverseWords(s string) string {
124122
```ts
125123
function reverseWords(s: string): string {
126124
return s
127-
.split(/\s+/)
128-
.map(str => {
129-
let res = '';
130-
for (const c of str) {
131-
res = c + res;
132-
}
133-
return res;
134-
})
125+
.split(' ')
126+
.map(t => t.split('').reverse().join(''))
135127
.join(' ');
136128
}
137129
```
@@ -149,6 +141,21 @@ impl Solution {
149141
}
150142
```
151143

144+
#### JavaScript
145+
146+
```js
147+
/**
148+
* @param {string} s
149+
* @return {string}
150+
*/
151+
var reverseWords = function (s) {
152+
return s
153+
.split(' ')
154+
.map(t => t.split('').reverse().join(''))
155+
.join(' ');
156+
};
157+
```
158+
152159
#### PHP
153160

154161
```php
@@ -158,11 +165,11 @@ class Solution {
158165
* @return String
159166
*/
160167
function reverseWords($s) {
161-
$sArr = explode(' ', $s);
162-
for ($i = 0; $i < count($sArr); $i++) {
163-
$sArr[$i] = strrev($sArr[$i]);
168+
$words = explode(' ', $s);
169+
foreach ($words as $i => $word) {
170+
$words[$i] = strrev($word);
164171
}
165-
return implode(' ', $sArr);
172+
return implode(' ', $words);
166173
}
167174
}
168175
```

solution/0500-0599/0557.Reverse Words in a String III/README_EN.md

+46-39
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,11 @@ tags:
5151

5252
<!-- solution:start -->
5353

54-
### Solution 1
54+
### Solution 1: Simulation
55+
56+
We can split the string $\textit{s}$ into an array of words $\textit{words}$ by spaces, then reverse each word and concatenate them back into a string.
57+
58+
The time complexity is $O(n)$, and the space complexity is $O(n)$. Here, $n$ is the length of the string $\textit{s}$.
5559

5660
<!-- tabs:start -->
5761

@@ -60,22 +64,19 @@ tags:
6064
```python
6165
class Solution:
6266
def reverseWords(self, s: str) -> str:
63-
return ' '.join([t[::-1] for t in s.split(' ')])
67+
return " ".join(t[::-1] for t in s.split())
6468
```
6569

6670
#### Java
6771

6872
```java
6973
class Solution {
7074
public String reverseWords(String s) {
71-
StringBuilder res = new StringBuilder();
72-
for (String t : s.split(" ")) {
73-
for (int i = t.length() - 1; i >= 0; --i) {
74-
res.append(t.charAt(i));
75-
}
76-
res.append(" ");
75+
String[] words = s.split(" ");
76+
for (int i = 0; i < words.length; ++i) {
77+
words[i] = new StringBuilder(words[i]).reverse().toString();
7778
}
78-
return res.substring(0, res.length() - 1);
79+
return String.join(" ", words);
7980
}
8081
}
8182
```
@@ -86,14 +87,16 @@ class Solution {
8687
class Solution {
8788
public:
8889
string reverseWords(string s) {
89-
for (int i = 0, n = s.size(); i < n; ++i) {
90-
int j = i;
91-
while (++j < n && s[j] != ' ')
92-
;
93-
reverse(s.begin() + i, s.begin() + j);
94-
i = j;
90+
stringstream ss(s);
91+
string t;
92+
string ans;
93+
while (ss >> t) {
94+
reverse(t.begin(), t.end());
95+
ans += t;
96+
ans.push_back(' ');
9597
}
96-
return s;
98+
ans.pop_back();
99+
return ans;
97100
}
98101
};
99102
```
@@ -102,18 +105,13 @@ public:
102105
103106
```go
104107
func reverseWords(s string) string {
105-
t := []byte(s)
106-
for i := 0; i < len(t); i++ {
107-
j := i
108-
for j < len(t) && t[j] != ' ' {
109-
j++
110-
}
111-
for st, ed := i, j-1; st < ed; st, ed = st+1, ed-1 {
112-
t[st], t[ed] = t[ed], t[st]
113-
}
114-
i = j
108+
words := strings.Fields(s)
109+
for i, w := range words {
110+
t := []byte(w)
111+
slices.Reverse(t)
112+
words[i] = string(t)
115113
}
116-
return string(t)
114+
return strings.Join(words, " ")
117115
}
118116
```
119117

@@ -122,14 +120,8 @@ func reverseWords(s string) string {
122120
```ts
123121
function reverseWords(s: string): string {
124122
return s
125-
.split(/\s+/)
126-
.map(str => {
127-
let res = '';
128-
for (const c of str) {
129-
res = c + res;
130-
}
131-
return res;
132-
})
123+
.split(' ')
124+
.map(t => t.split('').reverse().join(''))
133125
.join(' ');
134126
}
135127
```
@@ -147,6 +139,21 @@ impl Solution {
147139
}
148140
```
149141

142+
#### JavaScript
143+
144+
```js
145+
/**
146+
* @param {string} s
147+
* @return {string}
148+
*/
149+
var reverseWords = function (s) {
150+
return s
151+
.split(' ')
152+
.map(t => t.split('').reverse().join(''))
153+
.join(' ');
154+
};
155+
```
156+
150157
#### PHP
151158

152159
```php
@@ -156,11 +163,11 @@ class Solution {
156163
* @return String
157164
*/
158165
function reverseWords($s) {
159-
$sArr = explode(' ', $s);
160-
for ($i = 0; $i < count($sArr); $i++) {
161-
$sArr[$i] = strrev($sArr[$i]);
166+
$words = explode(' ', $s);
167+
foreach ($words as $i => $word) {
168+
$words[$i] = strrev($word);
162169
}
163-
return implode(' ', $sArr);
170+
return implode(' ', $words);
164171
}
165172
}
166173
```
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
class Solution {
22
public:
33
string reverseWords(string s) {
4-
for (int i = 0, n = s.size(); i < n; ++i) {
5-
int j = i;
6-
while (++j < n && s[j] != ' ')
7-
;
8-
reverse(s.begin() + i, s.begin() + j);
9-
i = j;
4+
stringstream ss(s);
5+
string t;
6+
string ans;
7+
while (ss >> t) {
8+
reverse(t.begin(), t.end());
9+
ans += t;
10+
ans.push_back(' ');
1011
}
11-
return s;
12+
ans.pop_back();
13+
return ans;
1214
}
13-
};
15+
};
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
func reverseWords(s string) string {
2-
t := []byte(s)
3-
for i := 0; i < len(t); i++ {
4-
j := i
5-
for j < len(t) && t[j] != ' ' {
6-
j++
7-
}
8-
for st, ed := i, j-1; st < ed; st, ed = st+1, ed-1 {
9-
t[st], t[ed] = t[ed], t[st]
10-
}
11-
i = j
2+
words := strings.Fields(s)
3+
for i, w := range words {
4+
t := []byte(w)
5+
slices.Reverse(t)
6+
words[i] = string(t)
127
}
13-
return string(t)
14-
}
8+
return strings.Join(words, " ")
9+
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
11
class Solution {
22
public String reverseWords(String s) {
3-
StringBuilder res = new StringBuilder();
4-
for (String t : s.split(" ")) {
5-
for (int i = t.length() - 1; i >= 0; --i) {
6-
res.append(t.charAt(i));
7-
}
8-
res.append(" ");
3+
String[] words = s.split(" ");
4+
for (int i = 0; i < words.length; ++i) {
5+
words[i] = new StringBuilder(words[i]).reverse().toString();
96
}
10-
return res.substring(0, res.length() - 1);
7+
return String.join(" ", words);
118
}
12-
}
9+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
* @param {string} s
3+
* @return {string}
4+
*/
5+
var reverseWords = function (s) {
6+
return s
7+
.split(' ')
8+
.map(t => t.split('').reverse().join(''))
9+
.join(' ');
10+
};

solution/0500-0599/0557.Reverse Words in a String III/Solution.php

+4-4
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ class Solution {
44
* @return String
55
*/
66
function reverseWords($s) {
7-
$sArr = explode(' ', $s);
8-
for ($i = 0; $i < count($sArr); $i++) {
9-
$sArr[$i] = strrev($sArr[$i]);
7+
$words = explode(' ', $s);
8+
foreach ($words as $i => $word) {
9+
$words[$i] = strrev($word);
1010
}
11-
return implode(' ', $sArr);
11+
return implode(' ', $words);
1212
}
1313
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
class Solution:
22
def reverseWords(self, s: str) -> str:
3-
return ' '.join([t[::-1] for t in s.split(' ')])
3+
return " ".join(t[::-1] for t in s.split())

0 commit comments

Comments
 (0)