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 }
View Code

 

posted @ 2019-11-17 10:56  小路不会迷路  阅读(199)  评论(0编辑  收藏  举报