kniost

谁怕,一蓑烟雨任平生

0%

LeetCode 151. Reverse Words in a String

151. Reverse Words in a String

Difficulty: Medium

Given an input string, reverse the string word by word.

Example 1:

1
2
Input: "the sky is blue"
Output: "blue is sky the"

Example 2:

1
2
3
Input: "  hello world!  "
Output: "world! hello"
Explanation: Your reversed string should not contain leading or trailing spaces.

Example 3:

1
2
3
Input: "a good   example"
Output: "example good a"
Explanation: You need to reduce multiple spaces between two words to a single space in the reversed string.

Note:

  • A word is defined as a sequence of non-space characters.
  • Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
  • You need to reduce multiple spaces between two words to a single space in the reversed string.

Follow up:

For C programmers, try to solve it in-place in O(1) extra space.

Solution

Language: Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Solution {
public String reverseWords(String s) {
if (s == null || s.length() == 0) {
return s;
}
LinkedList<String> list = new LinkedList<>();
int i = 0;
int start = 0;
while (i < s.length()) {
while (i < s.length() && s.charAt(i) == ' ') {
i++;
}
start = i;
while (i < s.length() && s.charAt(i) != ' ') {
i++;
}
if (start < s.length()) {
list.addFirst(s.substring(start, i));
}
}
return String.join(" ", list);
}
}