LC151. 翻轉字符串裏的單詞

翻轉字符串裏的單詞

問題描述:
  給定一個字符串,逐個翻轉字符串中的每個單詞。

示例1:

輸入: “the sky is blue”
輸出: “blue is sky the”

示例2:

輸入: " hello world! "
輸出: “world! hello”
解釋: 輸入字符串可以在前面或者後面包含多餘的空格,但是反轉後的字符不能包括。

示例3:

輸入: “a good example”
輸出: “example good a”
解釋: 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

說明:

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

解題思路:

  本題考查的是字符串的基本操作,有兩點需要注意的是:(1)轉換後的字符前後不能有空格;(2)中間出現的多個空格要壓縮成一個。

代碼如下:

#include<iostream>
#include<vector> 
using namespace std;
 string reverseWords(string s) {
        int i=0;
        for(i=0;i<s.size();i++){//刪除字符串前面的空格
            if(s[i]!=' ')break;
        }
        s.erase(0,i);
        for(i=s.size()-1;i>0;i--){//刪除字符串後面的空格
            if(s[i]!=' ')break;
        }
        s.erase(i+1,s.size()-i-1);
        vector<string>v;
        for(int i=0;i<s.size();i++){
            string s1="";
            while(i<s.size()){//遇到連續的字符保存在s1中
                if(s[i]!=' '){
                    s1+=s[i];
                    i++;
                }else{
                    break;
                }
            }
            v.push_back(s1);//放進容器
            int flag=0;
            while(i<s.size()){
                if(s[i]==' '){//出現空格則標誌,然後跳過
                    flag=1;
                    i++;
                }else{
                    break;
                }
            }
            if(flag){//若出現空格則保存一個空格進容器
                v.push_back(" ");
            }
            i--;
        }
        string s2="";
        for(int i=v.size()-1;i>=0;i--){//將容器的字符串從後往前拿出
            s2+=v[i];
        }
        return s2;
    }
int main(){
	string s="   the sky is blue   ";
	cout<<reverseWords(s)<<endl;
	return 0;
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章