剑指 Offer 58 - I—— 翻转单词顺序

题目链接:https://leetcode-cn.com/problems/fan-zhuan-dan-ci-shun-xu-lcof/

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。

输入: “the sky is blue”
输出: “blue is sky the”

输入: " hello world! "
输出: “world! hello”
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

输入: “a good example”
输出: “example good a”
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

解题过程

用了java的字符处理库,但还是出了很多错

题目有几点要求:

  • 只能在单词之间有空格
  • javasplit()在处理字符串时,如果直接传参" ",那么如果多个空格连在一起,会被分隔出null的。如果前面有空格也会被分割出一个null,但是后面的会自动减去。所以要使用正则表达式\\s+匹配多个空格
  • 最后连接单词时可以使用String.join()方法。
class Solution {
    public String reverseWords(String s) {
        String[] str = s.trim().split("\\s+");
        int len = str.length - 1;
        System.out.print(len);
        String[] res = new String[len + 1];
        for (int i = 0; i <= len; i++) {
            res[len - i] = str[i];
        }
        return String.join(" ", res);
    }
}

在这里插入图片描述

转换一些思路,但还是分割

class Solution {
    public String reverseWords(String s) {
        String[] str = s.trim().split(" ");
        int len = str.length - 1;
        StringBuffer res = new StringBuffer();
        for (int i = len; i >= 0; i--){
            if (str[i].equals("")) continue;
            res.append(str[i] + " ");
        }
        return res.toString().trim();
    }
}

在这里插入图片描述

你可能感兴趣的:(LeetCode)