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


//双指针
class Solution {
    public String reverseWords(String s) {
        //处理字符串 首尾空格
        String str = s.trim();
        //双指针
        int right = str.length() - 1;
        //left 指向 最右, 从右向左扫描
        int left = right;
        //结果集
        StringBuilder res = new StringBuilder();

        while(left >= 0){
            //找第一个空格
            while(left >= 0 && str.charAt(left) != ' '){
                left--;
            }
            //找到后,说明现在 双指针的区间内 为一个单词 加入结果集,加一个空格分隔
            res.append(s.substring(left + 1,right + 1) + ' ');
            //跳过单词之间的空格
            while(left >= 0 && s.charAt(left) == ' '){
                left--;
            }
            //将当前的left 指针 赋值给 right,找下一个单词
            right = left;
        }
        return res.toString().trim();
    }
}
class Solution {
    public String reverseWords(String s) {
        //去除首尾空格,并用空格拆分单词
         String[] str = s.trim().split(" ");
         //返回集
         StringBuilder res = new StringBuilder();

         for(int i = str.length - 1; i >= 0;i--){
            if(str[i].equals(" ") || str[i].equals("")){
                continue;
            }
            res.append(str[i]);
            res.append(" ");
         }
         return res.toString().trim();
    }
}