【面試題58-Ⅰ 翻轉單詞順序】
面試題58-Ⅰ:翻轉單詞順序:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。爲簡單起見,標點符號和普通字母一樣處理。例如輸入字符串"I am a student. “,則輸出"student. a am I”。
思路:先用 s.strip()
刪除字符串的首尾空格,從後向前遍歷字符串,根據空格判斷單詞,每遇到一個單詞就將其 append 到 res
列表中,並判斷是否爲第一個單詞,如果不是則繼續 append 一個空格。
注意 append 空格需要滿足:
- 沒有重複空格,也就是 s[i+1] 不是空格,s[i] 是空格纔可以 append,如果 s[i+1] 已經是空格 append 過了,那麼 s[i] 得空格就要跳過
- 第一個單詞前不需要加空格
時間複雜度:,只需要單向遍歷字符串一遍
空間複雜度:,用 res 列表存儲反向後的單詞
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip() # 去掉首尾空格
i, res = len(s)-1, []
while i >= 0: # 從後向前遍歷字符串
if s[i] != ' ':
j = i
while i >= 0 and s[i] != ' ': i -= 1
res.append(s[i+1:j+1]) # append單詞
# 判斷當前是否爲第一個單詞或有重複空格
if i != -1 and s[i+1] != ' ':
res.append(' ')
i -= 1
return ''.join(res)