1. 程式人生 > >leetcode 151. 翻轉字串裡的單詞

leetcode 151. 翻轉字串裡的單詞

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

示例:  

輸入: "the sky is blue",
輸出: "blue is sky the".

說明:

  • 無空格字元構成一個單詞。
  • 輸入字串可以在前面或者後面包含多餘的空格,但是反轉後的字元不能包括。
  • 如果兩個單詞間有多餘的空格,將反轉後單詞間的空格減少到只含一個。

進階: 請選用C語言的使用者嘗試使用 O(1) 空間複雜度的原地解法。


沒想到可以用trim等庫函式,自己一點點寫,一度把自己給弄亂了。晚上再次整理思緒,發現並沒有那麼複雜,考慮好邊界和最後一個空格就差不多了。

基本思路就是用l指向一個單詞的首字元的前一個位置,r指向該單詞的尾字元的後一個位置,用substring擷取該單詞,加入到res中,如果不是第一個單詞,就加上空格,否則不加。然後再更新l,迴圈即可。

不過用時較長,比不上用trim()和split()的。

public class Solution {
    public String reverseWords(String s) {
        if(s==null||s.length()<=0)return "";
        String res = "";
        int l,r;
        l=s.length()-1;
        while(l>=0&&s.charAt(l)==' ')l--;
        if(l<0)return "";
        boolean flag = false;
        while(l>=0){
            while(l>=0&&s.charAt(l)!=' ')l--;
            for(r=l+1;r<s.length()&&s.charAt(r)!=' ';r++){}
            if(flag){
                res+=" ";
            }
            else{
                flag=true;
            }
            res += s.substring(l+1,r);
            while(l>=0&&s.charAt(l)==' ')l--;
        }
        return res;
    }
}