【劍指Offer】面試題42:反轉單詞順序

整理自劍指Offer


一:題目描述

牛客最近來了一個新員工Fish,每天早晨總是會拿着一本英文雜誌,寫些句子在本子上。同事Cat對Fish寫的內容頗感興趣,有一天他向Fish借來翻看,但卻讀不懂它的意思。例如,“student. a am I”。後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是“I am a student.”。Cat對一一的翻轉這些單詞順序可不在行,你能幫助他麼?


二:解題思路

第一步:翻轉句子中所有字符

如“I am a student.”  --->".tneduts a ma I"

此時不但翻轉了句子中單詞的順序,連單詞內的字符的順序也被翻轉了

第二步:再翻轉句子中每一個字符的順序,就得到了“student. a am I”



三:代碼實現

class Solution {
public:	
    
 
    //轉換字符串的一段
    void Reverse(string &str,int start,int end){
        
        while(start<end){
            char temp=str[start];
            str[start]=str[end];
            str[end]=temp;
            start++;
            end--;
        }
    }
    

    
    string ReverseSentence(string str) {
        
        //邊界條件
        if(str.empty())
            return str;
        
        //翻轉整個字符串
        Reverse(str,0,str.size()-1);
        int i; //記錄遍歷到字符串的位置
        int start=0; //單詞的開始位置
        int end =0; //單詞的結束位置
        for(i=0;i<str.size();i++){
            //跳過空格,空格可能不止一個
            while(i<str.size() && str[i]==' ')
                i++;
            
            start=i;  //記錄單詞的第一個位置
            end=i;
            //尋找單詞最後一個位置
            while(i<str.size() && str[i]!=' ')
                i++;
            end=i-1; 
            
            
            //翻轉單詞
            Reverse(str,start,end);
        }
        return str;
    }
    
};

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