33. (倒序+双指针)剑指 Offer 58 - I. 翻转单词顺序

题目描述

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

思路

想到了从后往前遍历,记录单词;但是没有想起来怎么处理中间连着的 空格 ,实际使用while跳过就行!

用到了 trim()方法,将两端的空格处理掉

String字符串的相关API:

trim() 处理掉字符串两端的 空格;

split(String str):以str字符串为分割,将字符串切片,返回字符串数组!

代码

1)倒序,双指针,因为记录了两个位置的下标,也叫做双指针

class Solution {
    public String reverseWords(String s) {
        //题目的意思就是 以空格为分界
        s = s.trim();
        StringBuilder res = new StringBuilder();
        int i = s.length() - 1,m = i;
        while(i >= 0){
            while(i >= 0  && s.charAt(i) != ' ') i--;
            res.append(s.substring(i+1,m+1) + " ");
            while(i >= 0 && s.charAt(i) == ' ') i--;
            m = i;
        }
        return res.toString().trim();
    }
}

2)熟练运用 字符串的 函数APi

class Solution {
    public String reverseWords(String s) {
        String[] strs = s.trim().split(" ");//以空格切片
        StringBuilder res = new StringBuilder();
        for(int i = strs.length - 1;i >= 0;i--){
            if(strs[i].equals("")) continue;
            res.append(strs[i] + " ");
        }
        return res.toString().trim();
    }
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值