1. 程式人生 > >LeetCode151 翻轉字串裡的單詞

LeetCode151 翻轉字串裡的單詞

給定一個字串,逐個翻轉字串中的每個單詞。

示例:  

輸入: "the sky is blue",
輸出: "blue is sky the".

說明:

  • 無空格字元構成一個單詞。
  • 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
  • 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

進階: 請選用C語言的使用者嘗試使用 O(1) 空間複雜度的原地解法。

 


 

 

//章節 - 陣列和字串    
//五、小結
//3.翻轉字串裡的單詞
/*
演算法思想: 一種思路是,可以先分割字串,把分割出來的單詞的存在棧中,然後然後從棧中取出賦值到字串中即可。 */ //演算法實現: /* class Solution { public: void reverseWords(string &s) { stack<string>st; string str=""; for(int i=0;i<s.size();++i){ if(s[i]!=' ') str+=s[i]+""; else{ st.push(str); str=""; } } s=""; while(st.size()>1){ s+=st.top()+" "; st.pop(); } s+=st.top(); st.pop(); } };
*/ /* 演算法思想: 使用字串流類stringstream的解法,我們先把字串裝載入字串流中,然後定義一個臨時變數tmp,然後把第一個單詞賦給s,這裡需要注意的是,如果含有非空格字元,那麼每次>>操作就會提取連在一起的非空格字元,那麼我們每次將其加在s前面即可;如果原字串為空,那麼就不會進入while迴圈;如果原字串為許多空格字元連在一起,那麼第一個>>操作就會提取出這些空格字元放入s中,然後不進入while迴圈,這時候我們只要判斷一下s的首字元是否為空格字元,是的話就將s清空即可。 */ //演算法實現: class Solution { public
: void reverseWords(string &s) { istringstream is(s); string tmp; is >> s; while(is >> tmp) s = tmp + " " + s; if(!s.empty() && s[0] == ' ') s = ""; } };