本文參考自《劍指offer》一書,代碼採用Java語言。html
更多:《劍指Offer》Java實現合集 java
輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。爲簡單起見,標點符號和普通字母同樣處理。例如輸入字符串"I am a student. ",則輸出"student. a am I"。數組
一開始本身以爲要用split()方法,但這要開闢新的數組,佔內存空間,不行。
post
首先實現翻轉整個句子:只須要在首尾兩端各放置一個指針,交換指針所指的數字,兩端指針往中間移動便可。以後根據空格的位置,對每一個單詞使用一樣的方法翻轉便可。測試
測試算例 url
1.功能測試(句子中有一個/多個單詞,空格在開頭、中間、結尾)指針
2.邊界值測試(null,空字符串,句子全爲空格)htm
//題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。 //爲簡單起見,標點符號和普通字母同樣處理。例如輸入字符串"I am a student. ", //則輸出"student. a am I"。 public class ReverseWordsInSentence { public String ReverseSentence(char[] chars) { if(chars==null || chars.length<=0) return String.valueOf(chars); //翻轉整個句子 reverseSb(chars,0,chars.length-1); //翻轉單詞(指針指向單詞的第一個和最後一個) int start=0; int end=0; while(start<chars.length){ while(end<chars.length && chars[end]!=' ') end++; reverseSb(chars,start,end-1); start=++end; } /*翻轉單詞的另外一種寫法(指針指向blank位置) int blank = -1; for(int i = 0;i < chars.length;i++){ if(chars[i] == ' '){ int nextBlank = i; reverse(chars,blank + 1,nextBlank - 1); blank = nextBlank; } } reverse(chars,blank + 1,chars.length - 1);//最後一個單詞單獨進行反轉 */ return String.valueOf(chars); } private void reverseSb(char[] chars,int start,int end){ while(start<end){ char temp=chars[start]; chars[start]=chars[end]; chars[end]=temp; start++; end--; } } }
1.翻轉字符串方法get√blog
更多:《劍指Offer》Java實現合集 內存