給定一個字符串,逐個翻轉字符串中的每一個單詞。
示例 1:
輸入: "the sky is blue"
輸出: "blue is sky the"
示例 2:
輸入: " hello world! "
輸出: "world! hello"
解釋: 輸入字符串能夠在前面或者後面包含多餘的空格,可是反轉後的字符不能包括。
示例 3:
輸入: "a good example"
輸出: "example good a"
解釋: 若是兩個單詞間有多餘的空格,將反轉後單詞間的空格減小到只含一個。
來源:力扣(LeetCode)
連接:https://leetcode-cn.com/problems/reverse-words-in-a-string
著做權歸領釦網絡全部。商業轉載請聯繫官方受權,非商業轉載請註明出處。網絡
解答;app
這裏吐槽一句:別用坑爹的spilt函數,真的坑死了,仍是本身寫一個用吧,其餘沒什麼,就是將字符串分割放入一個棧中,最後在取出來就倒序了。ide
1 class Solution { 2 public String reverseWords(String s) { 3 if(s==null||s.length()==0) 4 return s; 5 LinkedList<String> list=new LinkedList<>(); 6 helper(list,s); 7 if(list.isEmpty()) 8 return ""; 9 StringBuilder sb=new StringBuilder(); 10 while(!list.isEmpty()) 11 sb.append(list.pop()+" "); 12 return sb.toString().substring(0,sb.length()-1); 13 14 15 } 16 public void helper(LinkedList<String>list,String s) 17 { 18 int r=0; 19 int l=0; 20 boolean flag=false; 21 while(r<s.length()) 22 { 23 if(s.charAt(r)==' '&&flag==true) 24 { 25 String str=s.substring(l,r); 26 list.push(str); 27 flag=false; 28 r++; 29 } 30 else if(s.charAt(r)==' '&&flag==false) 31 { 32 r++; 33 } 34 else if(s.charAt(r)!=' '&&flag==false) 35 { 36 flag=true; 37 l=r; 38 r++; 39 } 40 else 41 r++; 42 } 43 if(flag) 44 list.push(s.substring(l,r)); 45 } 46 }