LeetCode151. 翻轉字符串裏的單詞

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

示例:  

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

說明:

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

題目分析:首先將原字符串逆轉,然後挨個逆轉連續的子串,特別要注意,多個空格在一起的情況。

代碼展示:

class Solution {
public:
    void reverseWords(string &s){
        if(s.empty())
            return;
        reverse(s);
        string str = "";
        int i = 0;
        int j = 0;
        while(i<s.length()){
            while(s[i]==' '&&i<s.length())
                i += 1;
            if(i==s.length())
                break;
            j = i;
            while(s[j]!=' '&&j<s.length())
                j += 1;
            string temp = s.substr(i,j-i);
            reverse(temp);
            str += temp;
            str += " ";
            i = j;
        }
        s = str.substr(0,str.length()-1);
    }
    
    void reverse(string &s){
        char temp;
        for(int i=0;i<s.length()/2;i++){
            temp = s[i];
            s[i] = s[s.length()-i-1];
            s[s.length()-i-1] = temp;
        }
    }
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章