程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> leetcode:Reverse Words in a String

leetcode:Reverse Words in a String

編輯:關於C++

一、 題目

給出一個字符串,以單詞為單位反轉字符串。

例如 i am echo

返回 echo am i

二、 分析

仔細分析會發現,對於中間結果我們需要保存,即我們得保證以單詞為單位。另外我們需要考慮到下面的情況

1、中間有多個空格的處理

2、沒有空格的字符串

3、反轉後開頭和結尾不能有空格

4、最後的結果單詞間得有空格

所以,由以上我們有兩種思路,一種就是以單詞為單位反轉,這個需要用到vector,reverse即可,需要兩次for循環,如下:

 

class Solution {
public:
    void reverseWords(string &s) {
        vector des;
        if(s.empty())
            return;
        int len = s.size();
        for(int i = 0; i < len; i++){
            if(s[i] == ' ')
                continue;
            string word;
            while(i < len && s[i] != ' '){
                word += s[i];
                i++;
            }
            des.push_back(word);
        }
        reverse(des.begin(), des.end());
        if(des.empty())
            s = "";
        else {
            s.clear();
            int j ;
            for(j = 0; j < des.size() -1; j++){
                s += des[j];
                s += ' ';
            }
            s += des[j];    
        }
    }
};

 

另一種思路是使用特殊的存儲結構——棧,那麼此時我們就不需要再反轉了,直接順序保存即可,代碼如下:

 

class Solution {
public:
    void reverseWords(string &s) {
        stack des;
        if(s.empty())
            return;
        int len = s.size();
        for(int i = 0; i < len; i++){
            if(s[i] == ' ')
                continue;
            string word;
            while(i < len && s[i] != ' '){
                word += s[i];
                i++;
            }
            des.push(word);
        }
        if(des.empty())
            s = "";
        else {
            s.clear();
            int j ;
            int length = des.size();
            for(j = 0; j < length -1; j++){
                s += des.top();
                des.pop();
                s += ' ';
            }
            s += des.top();
        }
    }
};

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved