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

Posted 怕什么

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[LeetCode] 151. 翻转字符串里的单词相关的知识,希望对你有一定的参考价值。

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

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. 翻转字符串里的单词的主要内容,如果未能解决你的问题,请参考以下文章

5-104-(LeetCode- 151) 翻转字符串里的单词?

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

Leetcode No.151 翻转字符串里的单词

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

leetcode-151-翻转字符串里的单词

leetcode151. 翻转字符串里的单词