Leetcode 557. 反轉字串中的單詞 III
阿新 • • 發佈:2018-12-17
1.題目描述
給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。
示例 1:
輸入: "Let's take LeetCode contest" 輸出: "s'teL ekat edoCteeL tsetnoc"
注意:在字串中,每個單詞由單個空格分隔,並且字串中不會有任何額外的空格。
2.一般解法
class Solution { public: string reverseWords(string s) { if(s.size()==0) return s;//拷貝字串 for(auto a : s) res.push_back(a);//string也支援vector的push_back操作 //遍歷尋找空格 int size = s.size(); int begin = 0; for(int i=0; i<size; ++i){ if(s[i]==' ') { reverse(res,begin,i-1); begin= i+1; } } //反轉最後一個單詞(for迴圈中未處理) reverse(res,begin,size-1); return res; } //反轉函式 void reverse(string& s, int begin, int end){ for(int m=begin; m<=(begin+end)/2; ++m) swap(s[m],s[begin+end-m]); }private: string res; };
3.優化程式碼
//推薦:迭代器放方式訪問 class Solution { public: string reverseWords(string s) { auto beg = s.begin(), end = s.begin(); while(beg != s.end()) { while(beg != s.end() && *beg != ' ') ++beg; reverse(beg,end);//直接呼叫系統的reverse函式 if(beg!=s.end()) end= ++beg; } return s; } };