058 - 最后一个单词的长度(length-of-last-word)

Create by jsliang on 2019-06-10 18:18:16
Recently revised in 2019-06-10 19:46:34

一 目录

不折腾的前端,和咸鱼有什么区别

目录
一 目录
二 前言
三 解题
3.1 解题 - 暴力破解
3.2 解法 - 正则表达式

二 前言

返回目录

给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

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

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

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

三 解题

返回目录

小伙伴可以先自己在本地尝试解题,再回来看看 jsliang 讲解下使用 JavaScript 的解题思路。

3.1 解法 - 暴力破解

返回目录

  • 解题代码
var lengthOfLastWord = function(s) {
  // 防止 'b   a  cc' 的情况,去掉多余空格(去重)
  const result = [...new Set(s.split(' '))];
  // 防止 'a  ' 的情况
  if (result.length >=2 && result[result.length - 1] === '') {
    return result[result.length - 2].length
  }
  return result[result.length - 1].length;
};
  • 执行测试

  • sHello World

  • return
5
  • LeetCode Submit
✔ Accepted
  ✔ 59/59 cases passed (72 ms)
  ✔ Your runtime beats 96.22 % of javascript submissions
  ✔ Your memory usage beats 20.38 % of javascript submissions (33.9 MB)
  • 知识点

  • split()split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。split() 详细介绍

  • SetSet 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。Set 详细介绍

  • 解题思路

首先,说个比较复杂的逻辑:

  1. 通过 split() 将字符串打成数组
  2. 通过 Set 对数组去重
  3. 通过 [...Object] 扩展运算符再将 Set 类型打成数组。

然后,由于 'a ' 的情况下,会将该字符串转成 ['a', ''],所以我们需要判断最后一个是不是 '',如果是的话,我们取倒数第二个的长度。

最后,正常情况下,返回倒数第一个的长度。

3.2 解法 - 正则表达式

返回目录

  • 解题代码
var lengthOfLastWord = function(s) {
  s = s.replace(/(\s*$)/g, "");
  let arr = s.split(' ');
  return arr[arr.length - 1].length;
};
  • 执行测试

  • sHello World

  • return
5
  • LeetCode Submit
✔ Accepted
  ✔ 59/59 cases passed (64 ms)
  ✔ Your runtime beats 99.42 % of javascript submissions
  ✔ Your memory usage beats 35.25 % of javascript submissions (33.7 MB)
  • 知识点

  • RegExp:构造函数的原型对象。常用语一些便捷操作。RegExp 详细介绍

  • split()split() 方法使用指定的分隔符字符串将一个 String 对象分割成字符串数组,以将字符串分隔为子字符串,以确定每个拆分的位置。split() 详细介绍

  • 解题思路

首先,进行正则去空格,\s 的意思是匹配任何空白字符,包括空格、制表符、换行符等,而 * 表示任意个,$ 表示结尾,所以 \s*$ 的意思就是匹配结尾的任意个空格,并将其替换为 ''(注意,不是空,而是去掉)

然后,通过 split() 将字符串打成数组。

最后,返回数组最后一位的长度。


不折腾的前端,和咸鱼有什么区别!

图

jsliang 会每天更新一道 LeetCode 题解,从而帮助小伙伴们夯实原生 JS 基础,了解与学习算法与数据结构。

扫描上方二维码,关注 jsliang 的公众号,让我们一起折腾!

知识共享许可协议
jsliang 的文档库梁峻荣 采用 知识共享 署名-非商业性使用-相同方式共享 4.0 国际 许可协议进行许可。
基于https://github.com/LiangJunrong/document-library上的作品创作。
本许可协议授权之外的使用权限可以从 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 处获得。

Copyright © jsliang.top 2019 all right reserved,powered by Gitbook该文件修订时间: 2019-06-14 21:45:48

results matching ""

    No results matching ""