leetcode_字節跳動_挑戰字符串_翻轉字符串裏的單詞

  翻轉字符串裏的單詞
 

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

 

示例 1:app

輸入: ""
輸出: ""
the sky is blueblue is sky the

示例 2:函數

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

示例 3:spa

輸入: "a good   example"
輸出: "example good a"
解釋: 若是兩個單詞間有多餘的空格,將反轉後單詞間的空格減小到只含一個。

 

說明:指針

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

 

進階:code

請選用 C 語言的用戶嘗試使用 O(1) 額外空間複雜度的原地解法。blog

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ip

這個題目頗有親切感,大一上的c語言入門時,就在學校oj碰到過這個題目,後來當助教更是重溫了一下。字符串

之前作這個字符串的分割題目時,老是會用到循環判斷是否是某個字符,直到後來編譯原理學會了strtok這個函數,今後真香一發不可收拾。string

strtok

描述

C 庫函數 char *strtok(char *str, const char *delim) 分解字符串 str 爲一組字符串,delim 爲分隔符。

聲明

下面是 strtok() 函數的聲明。

char *strtok(char *str, const char *delim) //第一個是待分割的字符串,後面的是分隔符。

參數

  • str -- 要被分解成一組小字符串的字符串。
  • delim -- 包含分隔符的 C 字符串。

返回值

該函數返回被分解的第一個子字符串,若是沒有可檢索的字符串,則返回一個空指針。

實例

下面的實例演示了 strtok() 函數的用法。

實例

        string s;
        char *p;
        p = strtok((char*)s.c_str()," ");//第一個子串
        while(p!=NULL){
            p = strtok(NULL," ");//以後的子串
        }    

要是在一個字符串中有不一樣的分隔符,則轉換分隔符時要把NULL變成下一個分隔符。

 

---------------------------------------------------回到題目---------------------------------------------------------------------------------------------

當咱們學會了分割一切都變得簡單了,只須要分割完倒過來就行,我選擇了使用容器vector暫時存儲子串,最後倒過來。

class Solution {
public:
    string reverseWords(string s){
        if(s.length()==0) return "";//
        
        vector<string> res;
        char *p;
        p = strtok((char*)s.c_str()," ");
        
        while(p!=NULL){
            res.push_back(p);
            p = strtok(NULL," ");
        }
        string r="";
        for(int i=res.size()-1;i>=0;i--){
            r+=res[i];
            if(i!=0) r+=" ";
        }
        //cout<<r<<endl;
        return r;
    }
};

 

 -------------------------------------------------------------------------------------隨意的分割線------------------------------------------------------------------------------------

題目說還有空間O(1)的原地翻轉方法,有空研究完再補充,這個時間複雜度可能較高。

相關文章
相關標籤/搜索