友情支持

如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜

支付宝

微信

有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。

wx jikerizhi

公众号的微信号是: jikerizhi因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。

151. Reverse Words in a String

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

Example 1:

Input: “the sky is blue”
Output: “blue is sky the”

Example 2:

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

Example 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.

思路分析

  • 一刷

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
 * @author D瓜哥 · https://www.diguage.com
 * @since 2024-09-19 17:11:20
 */
public String reverseWords(String s) {
  Deque<String> stack = new LinkedList<>();
  boolean inWord = false;
  for (char c : s.toCharArray()) {
    if (c == ' ') {
      inWord = false;
    } else {
      if (!inWord) {
        stack.push(String.valueOf(c));
        inWord = true;
      } else {
        stack.push(stack.pop() + c);
      }
    }
  }
  StringBuilder sb = new StringBuilder(s.length());
  while (!stack.isEmpty()) {
    sb.append(stack.pop()).append(" ");
  }
  sb.deleteCharAt(sb.length() - 1);
  return sb.toString();
}