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

思路:双指针从后往前遍历,根据第一个遇到的空格划分单词,使用StringBuilder拼接。

贴一下从后往前最后一个单词怎么拼接:

1.如果首位为字母,while(i >= 0 && s.charAt(i) != ' '),i为-1时进行拼接然后跳出大循环。

2.如果首位为空格,也类似,只是不用拼接。

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

class Solution {
    public String reverseWords(String s) {
        //首先去除首首尾空格
        s = s.trim();
        int i = s.length() - 1, j = i;
        StringBuilder res = new StringBuilder();
        while(i >= 0){
            //必须要加i>=0,因为第0位不为空格,i会越界
            while(i >= 0 && s.charAt(i) != ' ')
                i--;
            res.append(s.substring(i + 1, j + 1) + " ");
            //同理,第0位为空格会越界
            while(i >= 0 && s.charAt(i) == ' ')
                i--;
            j = i;
        }
        //添加trim因为每次拼接最后加上了" ",会多一个空格
        return res.toString().trim();
    }
}

 

posted @ 2021-03-27 11:17  星予  阅读(31)  评论(0编辑  收藏  举报