leetcode151. 翻转字符串里的单词
给定一个字符串,逐个翻转字符串中的每个单词。
示例 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解答;
这里吐槽一句:别用坑爹的spilt函数,真的坑死了,还是自己写一个用吧,其他没什么,就是将字符串分割放入一个栈中,最后在取出来就倒序了。
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 }