算法

LeetCode151.翻转字符串里的单词

2021-08-06  本文已影响0人  Timmy_zzh
1.题目描述
示例 1:
输入:s = "the sky is blue"
输出:"blue is sky the"
  
示例 2:
输入:s = "  hello world  "
输出:"world hello"
解释:输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括。

示例 3:
输入:s = "a good   example"
输出:"example good a"
解释:如果两个单词间有多余的空格,将翻转后单词间的空格减少到只含一个。

示例 4:
输入:s = "  Bob    Loves  Alice   "
输出:"Alice Loves Bob"
  
示例 5:
输入:s = "Alice does not even like bob"
输出:"bob like even not does Alice"
 
提示:
1 <= s.length <= 104
s 包含英文大小写字母、数字和空格 ' '
s 中 至少存在一个 单词
进阶:
请尝试使用 O(1) 额外空间复杂度的原地解法。
2.解题思路:
    public String reverseWords_v1(String s) {
        if (s == null || "".equals(s = s.trim())) {
            return "";
        }
        String[] splits = s.split(" ");
        StringBuilder sb = new StringBuilder();
        for (int i = splits.length - 1; i >= 0; i--) {
            String str = splits[i].trim();
            if (str.length() != 0) {
                sb.append(" ").append(str);
            }
        }
        return sb.substring(1);
    }
    public String reverseWords(String s) {
        if (s == null || "".equals((s = s.trim()))) {
            return "";
        }
        StringBuilder word = new StringBuilder();
        ArrayDeque<String> queue = new ArrayDeque<>();

        System.out.println(s);
        char[] chars = s.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char ch = chars[i];
            if (ch != ' ') {
                word.append(ch);
            } else {
                if (word.length() > 0) {
                    queue.offerFirst(word.toString());
                    word.setLength(0);
                }
            }
        }
        if (word.length() > 0) {
            queue.offerFirst(word.toString());
        }
        return String.join(" ", queue);
    }
3.总结
上一篇 下一篇

猜你喜欢

热点阅读