LeetCode-151-翻转字符串里的单词

给定一个字符串,逐个翻转字符串中的每个单词。

说明:

无空格字符构成一个 单词 。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

示例 1:

输入:"the sky is blue"
输出:"blue is sky the"
示例 2:

输入:" hello world! "
输出:"world! hello"
解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-words-in-a-string

解题思路

用左右指针,先过滤掉最左最右的空格
然后用一个双端队列,一个StringBuilder
StringBuilder用于拼接字符成一个完整的单词
双端队列用于拼接这些单词,并且都是添加到头部,达到逆序的目的
最后用空格拼接队列中的字符串

代码

class Solution {
    public String reverseWords(String s) {
        int left = 0, right = s.length() - 1;
        // 跳过左右的空格
        while (left <= right && s.charAt(left) == ' ') {
            left++;
        }
        while (left <= right && s.charAt(right) == ' ') {
            right--;
        }
        Deque deque = new LinkedList<>();
        StringBuilder word = new StringBuilder();
        while (left <= right) {
            char ch = s.charAt(left);
            if (ch == ' ') {
                if (word.length() != 0) {
                    deque.offerFirst(word.toString()); // 添加到头部
                    word.setLength(0); // 清空
                }
            } else {
                word.append(ch);
            }
            left++;
        }
        deque.offerFirst(word.toString());
        return String.join(" ", deque);
    }
}

你可能感兴趣的:(LeetCode-151-翻转字符串里的单词)