LeetCode刷题第11天字符串系列之《 58最后一个单词长度》

LeetCode 58最后一个单词长度

题目描述

给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。

如果不存在最后一个单词,请返回 0 。

说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。

示例

输入: “Hello World”

输出: 5

题目解析

按照题目的意思,反正就是找到最后一个有字母的单词的长度(当然拼写正不正确不是我们管的)。那么从后往前开始遍历,统计字符的个数,遇到空格的时候返回统计的长度即可。但是题目给的字符串可能在最后面会给出多个空格,例如:“hello world ”。此时只需将首尾的空格去掉即可。去掉方法有以下两种:

  1. 使用java字符串中的trim方法去掉首尾空格
  2. 不用显示去掉,直接在统计的时候跳过最后面的空格,遇到第一个不是空格的字符时开始计算。

下面是两种实现方式:

  1. 对于java,C++,python等这类语言的话,都有对于字符串的切片操作,即split。下面就是直接使用split函数,将输入的字符串根据空格切分成字符串数组,返回该数组最后一个字符串的长度即可。

        public int lengthOfLastWord(String s) {
            String[] split = s.split(" ");
            if (split.length == 0) {	//s都是空格的话切分之后的数组为空
                return 0;
            }
            return split[split.length - 1].length();
        
        }
    

    程序执行结果:

最后一个单词长度
 

  1. 上面那种使用split的方法虽然简单直接,但是并没有那么快,直接从后面往前面统计的方法就要快很多,代码如下:

    public int lengthOfLastWord(String s) {
    
        int count = 0;
        //s = s.trim();			//提前将首尾的空格去除掉
        for (int i = s.length() - 1; i >= 0; i--) {
            if (s.charAt(i) == ' ' && count == 0) {		//直接跳过末尾的空格,没有用trim方法的话可以这么实现
                continue;
            }
            if (s.charAt(i) == ' ') {	//跳过最末尾的所有空格后如果之后还出现空格则证明最后一个单词的长度已经统计完毕
                break;
            }
            count++;
        }
        return count;
    }
    

最后一个单词长度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值