0
点赞
收藏
分享

微信扫一扫

6.<tag-字符串和API的使用>-lt.151. 颠倒字符串中的单词(剑指 Offer 58 - I. 翻转单词顺序)

覃榜言 2022-05-06 阅读 32

lt.151. 颠倒字符串中的单词

  • 本题等同于 剑指 Offer 58 - I. 翻转单词顺序

[案例需求]

在这里插入图片描述

[思路分析一, 各种api的使用]

[代码实现]

class Solution {
    public String reverseWords(String s) {
        String[] strs = s.split("\\s+"); //多次匹配空格, 能够把多余的空格去掉
        
        int left = 0;
        int right = strs.length - 1;

        while(left < right){
            //if(strs[left].equals(" "))++left;
            //if(strs[right].equals(" "))--right;
            String temp = strs[left]; // 交换左右指针下的单词
            strs[left] = strs[right];
            strs[right] = temp;
            ++left;
            --right;
        }

        return String.join(" ", strs).trim(); //把每个单词用空格拼接起来, 最终结果取出两侧的空格

    }
}

在这里插入图片描述

[API解决思路二, ]

class Solution {
    public String reverseWords(String s) {
        String[] words = s.split(" ");
        
        StringBuilder sb = new StringBuilder();

        int len = words.length;

        for(int i = len - 1; i >= 0; i--){
            
            //去除空格
            String str = words[i];

            if(str.equals(""))continue;
            
            sb.append(str);
       
        }
        return sb.toString().trim();
    }
}

在这里插入图片描述

[思路分析二, 不借助API的最优实现]

[代码实现]

class Solution {
    public String reverseWords(String s) {
        char[] charArray=s.toCharArray();
        int left=0,right=s.length()-1;
        // 清除字符串两边的空格
        // 清除左边
        while(charArray[left]==' '){
            left++;
        }
        // 清除右边
        while(charArray[right]==' '){
            right--;
        }
        StringBuilder sb=new StringBuilder();
        // 开始添加单词
        while(left<=right){
            int index=right;
            // index 向左遍历找到第一个空格
            while(index>=left&&charArray[index]!=' '){
                index--;
            }
            // 现在 index 已经找到第一个空格,i=index+1 后移到字符串出现的位置
            // 添加字符串
            for(int i=index+1;i<=right;i++){
                sb.append(charArray[i]);
            }
            // 如果不是最后一个单词,就添加空格
            if(index>left) sb.append(' ');

            // 使用 index 指针 跳过中间可能出现的空格
            while(index>=left&&charArray[index]==' '){
                index--;
            }
            // 把 right 放到下一个单词出现的位置,继续循环
            right=index;
        }
        return sb.toString();
    }
}
举报

相关推荐

0 条评论