LeetCode-58. 最后一个单词的长度(day12)

简介: LeetCode-58. 最后一个单词的长度(day12)

一、前言


👨‍🎓作者:bug菌

✏️博客:CSDN掘金

💌公众号:猿圈奇妙屋

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

      哈喽,小伙伴们,我是bug菌呀👀。金三银四,又到了刷题月啦。所以不管你是准备跳槽还是在职,都一起行动起来,顺应这个时代月干点该干的事儿👣。所以,赶紧跟着bug菌的步伐卷起来吧⏰,变强从这一刻开始➕🧈。

      小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章点亮👍吧,您的点赞三连(收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,掘金不停💕,加油☘️


二、题目描述:


**题目:

**       给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。


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

具体请看如下示例:

示例 1:


输入:s = "Hello World"
输出:5


示例 2:


输入:s = "   fly me   to   the moon  "
输出:4


示例 3:


输入:s = "luffy is still joyboy"
输出:6


提示:


  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

题目来源:LeetCode官网
题目难度:⭐⭐


三、思路分析:


      这题其实的话,正常思路就是从反向遍历,然后由于字符串中至少存在一个单词,因此字符串中一定有字母。

      首先从后往前开始遍历,找到第一个字母即为最后一个字母的最后一个字母,然后继续遍历,如果遇到如下两种情况:

  • 遇到空格,停止循环,直接返回count计数。
  • 达到字符串的起始位置,说明遍历到的每一个字母都是最后一个单词中的字母,直接返回count计数即可。

     然后思路2,大家看看就好,纯粹就是取巧啦。做法就是:

  • 先去除字符串首尾的空格。
  • 获取最后一个空格的数组索引,然后很明显就可以确定最后一个字母的位置及长度了,因为最后一个字母前面的空格索引已经知道了,且后边也不会再出现空格。


四、算法实现:


1、反向遍历法_AC代码


具体算法代码实现如下:


class Solution {
    public int lengthOfLastWord(String s) {
        int count = 0;
        for (int i = s.length() - 1; i >= 0; i--) {
            //如果遇到空格,直接跳出循环
            if (s.charAt(i) == ' ' && count != 0) {
                break;
            }
            //计数
            if (s.charAt(i) != ' ') {
                count++;
            }
        }
        //返回计数
        return count;
    }
}


2、api法_AC代码


具体算法代码实现如下:


class Solution {
    public int lengthOfLastWord(String s) {
        //先去掉首尾的空格
        s = s.trim();
        //s.lastIndexOf(" ") 返回最后一个空格的数组下标。
        return s.length() - s.lastIndexOf(" ") - 1;
    }
}



拓展:

  • rim() 方法用于删除字符串的头尾空白符。
  • public int lastIndexOf(String str): 返回指定子字符串在此字符串中最右边出现处的索引,如果此字符串中没有这样的字符,则返回 -1。


五、总结:


1、xxx法之leetcode提交运行结果截图如下:


网络异常,图片无法展示
|


复杂度分析:

  • 时间复杂度:O(n),其中n 是字符串的长度。最多需要反向遍历字符串一次。
  • 空间复杂度:O(1)


2、api法之leetcode提交运行结果截图如下:


      综上所述,以上两种做法,都差不多,但是思路二确实新奇,写法简短,说明想法还是很重要的。解题道路千万条,所以也欢迎小伙伴们脑洞大开,如果你们有啥更好的想法或者思路,欢迎评论区告诉我哦,大家一起互相借鉴互相学习,方能成长的更快。


      好啦,以上就是本期的所有内容啦,咱们下期见咯。


六、往期推荐:



七、文末:


      如果你还想要学习更多,小伙伴们大可关注bug菌专门为大家创建的专栏《LeetCode每日一题》!带着你一块儿刷题,专栏每一篇都附带详细解法,手把手带你解题。

      一个人刷可能会觉得很累很难坚持,但是一群人刷就会觉得它是一件很有意义的事儿,互相督促互相鼓励,一起变强。



目录
相关文章
|
13天前
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
14 0
|
13天前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
14 0
|
2月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
2月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
31 4
|
2月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
36 3
|
2月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
16 0
|
4月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
4月前
|
存储 SQL 算法
LeetCode题58: 5种算法实现最后一个单词的长度【python】
LeetCode题58: 5种算法实现最后一个单词的长度【python】
|
4月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
24 0
|
4月前
|
算法
力扣经典150题第二十一题:反转字符串中的单词
力扣经典150题第二十一题:反转字符串中的单词
43 0