码迷,mamicode.com
首页 > 其他好文 > 详细

[LeetCode] 151. 翻转字符串里的单词

时间:2020-04-10 19:52:29      阅读:80      评论:0      收藏:0      [点我收藏+]

标签:连续   char   leetcode   array   class   equal   har   str   for   

自己做的错了,没考虑到中间可能有多个空格:

public static String reverseWords(String s){
        String[] s1 = s.trim().split(" ");
        String s2=new String();
        s2=s1[s1.length-1]+" ";
        for(int i=s1.length-2;i>0;i--){
            s2=s2+s1[i]+" ";
        }
        s2=s2+s1[0];
//        s2.trim();
        return s2;
    }

这里如果在用split的时候用的是正则表达式就不会有问题,再利用语言对字符串提供的工具:

class Solution {
    public String reverseWords(String s) {
        // 除去开头和末尾的空白字符
        s = s.trim();
        // 正则匹配连续的空白字符作为分隔符分割
        List<String> wordList = Arrays.asList(s.split("\\s+"));
        Collections.reverse(wordList);
        return String.join(" ", wordList);
    }
}

不得不说,自带的方法真的很慢哈,虽然写起来很简单。

技术图片

题解中给的方法一:用一个双指针,相当于遍历整个数组

class Solution {
    public String reverseWords(String s) {
        s = s.trim();
        int j=s.length()-1,i=j;
        StringBuilder res=new StringBuilder();
        while(i>=0){
            while(i>=0&&s.charAt(i)!=‘ ‘)i--;
            res.append(s.substring(i+1,j+1)+" ");
            while(i>=0&&s.charAt(i)==‘ ‘)i--;
            j=i;
        }
        return res.toString().trim();
    }
}

技术图片

 

 方法二:

class Solution {
    public String reverseWords(String s) {
        String arr[]=s.split(" ");
        StringBuilder sb = new StringBuilder("");
        for(int i=arr.length-1;i>=0;i--){
            if("".equals(arr[i])){
                continue;
            }
            sb.append(arr[i]).append(" ");
        }
        String res=sb.toString();
        if("".equals(res)){
            return res;
        }
        return res.substring(0,res.length()-1);
    }
}

技术图片

 

[LeetCode] 151. 翻转字符串里的单词

标签:连续   char   leetcode   array   class   equal   har   str   for   

原文地址:https://www.cnblogs.com/doyi111/p/12675505.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!