1. 程式人生 > >隨筆-翻轉字串裡的單詞

隨筆-翻轉字串裡的單詞

題目:

給定一個字串,逐個翻轉字串中的每個單詞。

示例:

輸入: “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();
    }
}