1. 程式人生 > >Leetcode 557. 反轉字串中的單詞 III

Leetcode 557. 反轉字串中的單詞 III

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;
    }
};