【劍指Offer】44、反轉單詞序列


  題目描述:

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

  解題思路:

  本題相對比較簡單,但是在面試中經常遇到,流傳甚廣。其主要思路也簡潔明了,主要分為以下兩步:

  第一步:反轉整個序列中所有的字符,這時會發現不但反轉了單詞的順序,單詞中的字母順序也被反轉,因此需要第二步的調整。

  第二步:以空格為分隔,依次反轉每個單詞,即讓每個單詞會到原來的正常順序。

  舉例:

  以字符串“student. a am I”為例:整體反轉后變為:"I ma a ,tenduts",然后再反轉每個單詞,可以得到最后結果:“I am a student.”。

  編程實現(Java):

public class Solution {
    //先翻轉整個字符串,再逐一翻轉每個單詞
    public String ReverseSentence(String str) {
        if(str==null)
            return null;
        char[] strArr=str.toCharArray();
        reverseStr(strArr,0,strArr.length-1); //翻轉整個字符串
        int begin=0;
        for(int i=0;i<strArr.length;i++){
            if(strArr[i]==' '){
                reverseStr(strArr,begin,i-1);
                begin=i+1;
            }
        }
        reverseStr(strArr,begin,strArr.length-1); //最后一個單詞后沒有空格
        return new String(strArr);
    }
    
    public void reverseStr(char[] array,int begin,int end){ //反轉字符串,前后指針
        for(;begin<end;begin++,end--){
            char c=array[begin];
            array[begin]=array[end];
            array[end]=c;
        }
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM