151. Reverse Words in a String
151. Reverse Words in a String
題目是給定一個字串,這個字串的模式是,這個字串很像是一個句子,但是是由多個單字以及「多個」空格所組成的。
例如:
- 看起來正常的句子:
s = "the sky is blue"
- 看起來正常的句子,但是頭尾多出了額外的空格:
s = " hello world "
- 看起來正常的句子,但是單字中間中,多出了額外的空格:s =
"a good example"
然後題目要求我們要把把所有的單字反向排列好後,並且依照第一個例子中的方式呈現,也就是說要去除掉不必要的空格。
這個題目會需要用到的 API 並不困難,而且答案也很好想,但是這個題目在面試中麻煩的是這個題目的解法滿多元的,相信多數的工程師可以快速想到一種找出答案的解法,但是在面試中快速地回答出問題後,很容易會有接續的問題,去考察面試者能不能夠用不同的方法來解的時候,這個地方會比較容易卡住。
現在的面試都可以讓面試者選擇自己熟悉的程式語言,像是我很習慣用 Python 來面試,而在 Python 中,這個題目可以很簡單的使用幾個 API 來完成。
其實這個題目比較麻煩的只有我需要把額外的空白給清除,並且用一個陣列依序紀錄每個單字就好。Python 其實就馬上有提供 strip()
這個 API 可以把上面各種情況的字串直接切分成好幾個單字,並且依序地存放在一個陣列裡面。
接著只要再處理單字的到序排列就好,Python 的陣列有提供 reverse()
的 API 可以完成,亦或是 reversed()
這個 API 。
最後的只要把陣列再組合成一個單一的字串,並且用空格相連,這時候可以使用 join()
這個 API。
整個邏輯可以用以下的方式來實踐:
class Solution:
def reverseWords(self, s: str) -> str:
tmp = s.split()
tmp.reverse()
return " ".join(tmp)
class Solution:
def reverseWords(self, s: str) -> str:
return " ".join(reversed(s.split()))
但如如果自己熟悉的語言沒有提供這些 API ,又或是面試官說可不可以用其他的方法來完成的時候,就可以去認真想想題目的特性。
其實這個題目可以使用雙指針的快慢指針來完成。