↓快轉到主要內容
  1. LeetCode/

LeetCode 151: Reverse Words in a String

·1 分鐘· ·
LeetCode Medium Two-Pointers String
Wei Yi Chung
作者
Wei Yi Chung
Working at the contributing of open source, distributed systems, and data engineering.
目錄

基本資料
#

難易度: medium 第一次嘗試:2022-11-12

  • 提交紀錄:Accepted ×3 → Runtime Error → Wrong Answer ×5 → Accepted

解題思路
#

str.split() 不帶參數時,會把任意長度的空白當成一個分隔,頭尾的空白也會被丟掉,剛好就是題目要的單字列表。反轉後用一個空白 join 起來。如果要求 O(1) 額外空間(字元陣列),可以先整個反轉、再逐字反轉(Two Pointers 模板一)。

我的嘗試
#

2022 年就 AC 了。2026 年重寫時用了 split(" "),連續空白會產生空字串,例如 "b b" 回傳 "b b"(中間還是兩個空白),"b " 回傳 " b";也有一版忘了中間要加空白,"a b" 回傳 "ba"。

正確解法
#

class Solution:
    def reverseWords(self, s: str) -> str:
        return " ".join(reversed(s.split()))

複雜度
#

時間 O(n),空間 O(n)。

要特別避免的錯誤
#

  • split(" ") 遇到連續空白會產生空字串,split() 不會。

面試口說整理
#

我用不帶參數的 split() 拿到所有單字(連續空白和頭尾空白都處理好了),反轉後用一個空白接起來。時間 O(n)。

相關文章

LeetCode 647: Palindromic Substrings
·1 分鐘
LeetCode Medium Two-Pointers String Dynamic-Programming
LeetCode 647 解題筆記:中心擴展,每擴展成功一次就是一個回文子字串
LeetCode 5: Longest Palindromic Substring
·1 分鐘
LeetCode Medium Two-Pointers String Dynamic-Programming Manacher
LeetCode 5 解題筆記:中心擴展,每個位置當奇數和偶數長度的中心往外擴;區間 DP 的話 i 要從大到小
LeetCode 189: Rotate Array
·1 分鐘
LeetCode Medium Array Math Two-Pointers
LeetCode 189 解題筆記:先 k %= n,再用三次反轉:整個反轉、前 k 個反轉、後 n - k 個反轉;O(1) 額外空間
LeetCode 93: Restore IP Addresses
·1 分鐘
LeetCode Medium String Backtracking
LeetCode 93 解題筆記:切成剛好 4 段,每段長度 1 到 3、值在 0 到 255、除了 0 本身不能有前導零
LeetCode 131: Palindrome Partitioning
·1 分鐘
LeetCode Medium String Dynamic-Programming Backtracking
LeetCode 131 解題筆記:每一層從剩下字串的開頭切出一段回文,切的長度從 1 到整段都要試
LeetCode 143: Reorder List
·1 分鐘
LeetCode Medium Linked-List Two-Pointers Stack Recursion
LeetCode 143 解題筆記:找中點、反轉後半段、兩條交錯合併;前半段的尾巴要切斷