LeetCode刷题挑战-javascript:58.最后一个单词的长度

236 阅读1分钟

R-C.jpeg

「这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

题目

给你一个字符串 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 中至少存在一个单词

解题思路

看到题目第一眼,啊,真的好简单。刚刚被动态规划虐的好惨,终于碰到一题简单的可以放松一下啦😌~

方法一:转数组

先通过trim()方法去除字符串前后的空格。

然后用split方法将字符串根据空格拆分为数组。

最后返回数组中最后一位数的长度即可。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    let arr = s.trim().split(' ');
    return arr[arr.length - 1].length;
};

转数组的这种方法我看题解后发现有两个更高校更好玩的解法,分享如下:

下面两种解法除了运用split拆分字符串得到数组,还通过数组的pop方法直接获取到最后一个元素并求其长度即可。

第二种则是通过reverse反转数组直接拿取第一个元素求长度即可。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    return s.trim().split(' ').pop().length;
};
/**
 * @param {string} s
 * @return {number}
 */
 var lengthOfLastWord = function(s) {
    return s.trim().split(' ').reverse()[0].length;
};

方法二:反向遍历字符串

  • 直接反向遍历
  • 通过判断当前值是否为' ' , 如果是,则先跳过空字符
  • 从第一个不是空的字符开始计数
  • 若再遇到空字符,停止
  • 注意边界条件
/**
 * @param {string} s
 * @return {number}
 */
const lengthOfLastWord = s => {
    let [res, i] = [0, s.length - 1];
    // 跳过空字符
    while (s[i] === ' ') i--;
    // 统计单词长度
    // 防止`ASD`的情况,无限循环,加一个边界条件:i >= 0
    while (i >= 0 && s[i] !== ' ') {
        i--;
        res++;
    }
    return res;
};

结束语

这里是小葵🌻,只要把心朝着太阳的地方,就会有温暖~

让我们一起来攻克算法难关吧!!