写点什么

【刷题第 12 天】58. 最后一个单词的长度

作者:白日梦
  • 2022 年 5 月 18 日
  • 本文字数:895 字

    阅读完需:约 3 分钟

一、题目描述:

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

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

示例 1:

输入: s = "Hello World"输出: 5解释: 最后一个单词是“World”,长度为5。复制代码
复制代码

示例 2:

输入: s = "   fly me   to   the moon  "输出: 4 解释: 最后一个单词是“moon”,长度为4。复制代码
复制代码

二、思路分析:

这个题目并不难,只要找出最后一个单词即可。

这里我提供两种方法:

反向遍历

由于我们不确定字符串最后是否为空字符,因此我们首先需要找到最后一个字母,说明该字母即为最后一个单词的最后一个字母。

因此我们从最后一个字母开始反向遍历,当遍历到非空格字符或者字符串起始位置。在这个过程中,遍历到的每个元素都算是最后一个单词的范畴,因此我们边遍历边递增数量,遍历完毕后返回长度即可。

我们来模拟一下流程: "Hello World "

  • 我们首先从字符串最末尾开始遍历,最后字符为空格,继续寻找

  • 寻找到第一个最末尾字符 d ,开始计数

  • 继续向前遍历,到 W 字符,此时字符串长度为 5

  • 继续向前遍历,遍历到空格,遍历结束

  • 输出长度 5

时间复杂度: O(n),n 为字符串的长度,算法需要反向遍历字符串,因此复杂度为 O(n)空间复杂度: O(1),只声明几个变量,声明了常数空间

字符串大法好

反向遍历看着很爽,其实距离真正的爽还是有大大的差距,我们可以直接借助 JavaScript 字符串提供的方法实现。

  • trim 方法返回删除两头空格后的字符串

  • split 以空格分割将字符串拆成多个单词

  • at 复制直接遍历数组最后一个元素

  • .length 属性,求出单词长度

var lengthOfLastWord = function(s) {    return s.trim().split(" ").at(-1).length};复制代码
复制代码

三、AC 代码:

// 反向遍历法var lengthOfLastWord = function(s) {    let lastWordIndex = s.length - 1;    while (s[lastWordIndex] === ' ') lastWordIndex--;    let res = 0;    while (lastWordIndex >= 0 && s[lastWordIndex] !== ' ') {        res++;        lastWordIndex--;    }    return res;};复制代码
复制代码

四、总结:

双指针 yyds,做好双指针,简单题直接 AC,舒服啊,今天又是一次过


发布于: 刚刚阅读数: 3
用户头像

白日梦

关注

还未添加个人签名 2022.03.10 加入

还未添加个人简介

评论

发布
暂无评论
【刷题第12天】58. 最后一个单词的长度_5月月更_白日梦_InfoQ写作社区