leetcode 151. 翻轉字串裡的單詞
阿新 • • 發佈:2018-12-02
給定一個字串,逐個翻轉字串中的每個單詞。
示例:
輸入: "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; } }