problem:
given an input string, reverse the string word by word.
for example,
given s = "the sky is blue",
return "blue is sky the".
這個題目叙述的不夠精确,有些邊界的情況需要考慮。題目的下方給出了clarification澄清了幾個問題,也是面試的時候需要确認的。
第一個問題是什麼構成了一個詞(word),回答是一串不包含空格(non-space)的字元。這裡需要了解non-space,應該要包含‘ ‘, ‘\t‘,
‘\n‘等字元,c語言中可以通過宏定義isspace來判斷。
第二個問題是詞的開頭與結尾能有空格嗎,回答是有的,但傳回的結果中應該去掉。
第三個問題是分隔每兩個詞之間的空格能有多個嗎,回答是能,但傳回結果中應該隻留下一個空格就好。
通過詢問這三個問題,題目也就清楚多了,這個題目的解決思路并不困難,就是先翻轉每個單詞,再對整個字元串翻轉就能做到翻轉每個單詞的目的,但是同時要想将單詞間的空格變為一個,頭尾都要去掉就要費一番功夫。
我的解法是直接在原始的字元串上一遍掃描,從後向前翻轉單詞,同時将單詞移位到正确的位置,即每兩個單詞之間保證隻有一個空格。然後整體再翻轉一次,隻有結尾處還可能有些空格,再單獨處理。代碼中使用了algorithm中的reverse來翻轉字元串,效率可能會稍差,可以自己直接用下标操作,寫個翻轉函數。