Leetcode No. 151 - Reverse Words in a String
目錄
輸入一個字串,裡面會有數個單字,目標是要把單字反向輸出。如:
Input: "this dog"
Output: "dog this"麻煩的可能是額外的規則:輸入有可能在字串前中後都會多塞一些空白,但輸出必須還是要跟原本的一樣,如:
Input: " this dog "
Output: "dog this"Elixir
Elixir 有提供幾個方法可以好好「利用」:
s |> String.split()
|> Enum.reverse()
|> Enum.join(" ")考慮額外規則,移除前後空白需要用 String.trim/1;要把多 split 出來的 item 過濾要用 Enum.filter/2(或 Enum.reject/2)。照理來說,應該要寫像下面這樣:
s |> String.trim()
|> String.split()
|> Enum.filter(fn x -> x != "" end)
|> Enum.reverse()
|> Enum.join(" ")因為 String.split/1 已經把 trim 和 filter 的事都做掉了,所以第一個寫法已經是正解了。
但要注意的是:如果使用 String.split/3 的話,它的行為就跟 String.split/1 不同,會把多餘的空白也切出一個 item,使用 iex 實驗如下:
iex(1)> " foo bar " |> String.split()
["foo", "bar"]
iex(2)> " foo bar " |> String.split(" ")
["", "", "", "foo", "", "", "bar", "", "", ""]PHP
PHP 也有提供很多函式可以用,只是空白的部分需要自己處理:
$trimed = trim($s)
$splited = explode(' ', $trimed);
$filtered = array_filter($splited, function($v) {
return '' !== $v;
});
$reversed = array_reverse($filtered);
$solution = implode(' ', $reversed);上面是每個資料處理過程的步驟,總共用到了下面幾個函式: