每日一题——最后一个单词的长度

菜鸡每日一题系列打卡58

每天一道算法题目 

小伙伴们一起留言打卡

坚持就是胜利,我们一起努力!

题目描述(引自LeetCode)

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

示例:
输入: "Hello World"
输出: 5

说明:

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

题目分析

这是一道有关字符串子串的题目,根据题意,只需要从字符串末尾向前遍历,找到字符串的最后一个字母,然后再由此向前遍历,遇到第一个空格就得到了答案。

代码实现

class Solution {


    public int lengthOfLastWord(String s) {
        // 特殊情况处理
        if (s == null) return 0;
        // 寻找最后一个字母的位置
        int end = s.length() - 1;
        while (end >= 0 && s.charAt(end) == ' ') end--;
        // 如果不存在最后一个字母,则返回0
        if (end < 0) return 0;
        // 寻找最后一个单词的起始位置
        int start = end;
        while (start >= 0 && s.charAt(start) != ' ') start--;
        // 返回单词长度
        return end - start;
    }


}

代码分析

对代码进行分析,程序对字符串进行了最多一次遍历,因此,时间复杂度为O(n),而就空间而言,仅仅使用了常数级别的额外空间,因此,空间复杂度为O(1)。

执行结果

学习 | 工作 | 分享

????长按关注“有理想的菜鸡

只有你想不到,没有你学不到

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值