隨筆-翻轉字串裡的單詞
阿新 • • 發佈:2018-12-28
題目:
給定一個字串,逐個翻轉字串中的每個單詞。
示例:
輸入: “the sky is blue”,
輸出: “blue is sky the”.
說明:
無空格字元構成一個單詞。
輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。
思路:先用String的庫函式,trim 將字串頭部和尾部的空格去除。採用雙指標,j走到下一個空格的地方 將i - j-1進行反轉。如果兩個單詞之間有多個空格時,i++;j++ 直到i和j都不為空,重複操作; 當跳出迴圈後,做最後一個單詞的反轉。
public class Solution { public char[] reverse(char[] ch,int start,int end){ while(start<end){ char ch1=ch[start]; ch[start]=ch[end]; ch[end]=ch1; start++; end--; } return ch; } public String reverseWords(String s) { if(s==null){ return s; } s=s.trim(); if(s==""){ return s; } char [] ch=s.toCharArray(); ch=reverse(ch,0,ch.length-1); //全部反轉 int i=0; int j=0; StringBuffer sb=new StringBuffer(); while(j<ch.length){ if(ch[j]!=' '){ j++; }else{ if(ch[i]!=' '){ sb.append(reverse(ch,i,j-1),i,j+1-i); i=j+1; j++; }else{ i++; j++; } } } sb.append(reverse(ch,i,j-1),i,j-i); return sb.toString(); } }