力扣 - 劍指 Offer 58 - I. 翻轉單詞順序

linzeliang發表於2021-11-02

題目

劍指 Offer 58 - I. 翻轉單詞順序

思路1

  • 假如題目要求我們翻轉字串,那麼我們可以從末尾往前開始遍歷每一個字元,同時將每一個字元新增到臨時空間,最後輸出臨時空間的資料就完成翻轉了,這就是倒敘遍歷字串,即從最末尾開始遍歷。但是這一題又有些不同,題目要求是以單詞為單位進行翻轉字串,所以我們使用雙指標來找到一個完整的單詞,剩下的步驟基本和上面的一樣了,將單詞按順序存到臨時的空間,最後輸出即可。

程式碼

class Solution {
    public String reverseWords(String s) {
        // 先去除首位空格
        s = s.trim();
        StringBuilder sb = new StringBuilder();

        int begin = s.length() - 1;
        int end = s.length() - 1;
        while (end >= 0) {
            // 查詢第一個空格
            while (begin >= 0 && s.charAt(begin) != ' ') {
                begin--;
            }
            // 找到空格後新增單詞,同時手動新增空格
            sb.append(s.substring(begin+1, end+1) + " ");
            // 查詢下一個單詞的開始
            while (begin >= 0 && s.charAt(begin) == ' ') {
                begin--;
            }
            // 設定下一個單詞的結束部分
            end = begin;
        }
        // 由於末尾多了個空格,需要刪除
        s = sb.toString().trim();

        return s;
    }
}

複雜度分析

  • 時間複雜度:\(O(N)\),遍歷一次字串花費的時間是 N
  • 空間複雜度:\(O(N)\),臨時儲存字串所用的空間

相關文章