題目描述:
牛客最近來了一個新員工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;
}
}
}