Sword58-I——翻转单词顺序

Sword58-I——翻转单词顺序

方法1——双指针

  • 思路:使用双指针,因为其为翻转,所以从后往前遍历,每遇到一个空格,即证明此时为一个单词,将其进行拼接,之后找到前一个单词,再次拼接
  • 特殊情况与临界分析:无
  • 终止条件:无
  • 步骤:
    • 删除字符串前后空格,防止影响遍历
    • 定义双指针,从后往前
    • 定义StringBuilder用于拼接
    • while循环
      • 循环条件:left未越界,即大于等于0时
      • while循环,当left未越界且left处不为空格,一直向左递减
      • 退出while循环,证明此时left为空格,截取(left此时为空格,因此为left + 1到right + 1)并拼接一个单词,最后加上空格
      • 如上while循环再次判断是否不止一个空格,注意此时条件变成为空格,一直向左递减
      • 退出while循环,证明此时left不为空格,即开始下一个单词的拼接,需要将right移动到left处
    • 返回结果,因为每次拼接后都带有空格,因此去除多余的尾部空格
    public String reverseWords(String s) {
        // 删除字符串前后空格
        s = s.trim();
        // 定义双指针,从后往前遍历
        int right = s.length() - 1, left = right;
        // 定义StringBuilder
        StringBuilder res = new StringBuilder();
        // while循环
        while (left >= 0) {
            // while循环
            while (left >= 0 && s.charAt(left) != ' ') {
                // 向左递减
                left--;
            }
            // 此时left为空格,截取单词并进行拼接,最后加上空格
            res.append(s.substring(left + 1, right + 1) + " ");
            // 再次while循环,避免不止一个空格,此时条件变成为空格,一直向左递减
            while (left >= 0 && s.charAt(left) == ' ') {
                // 向左递减
                left--;
            }
            // 进行下一个单词的拼接,即调整right
            right = left;
        }
        // 返回结果,去除多余尾部空格
        return res.toString().trim();
    }

方法1——双指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值