「前端刷题」58. 最后一个单词的长度

192 阅读1分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

题目

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

方法一:分隔字符串

思路

  1. 首先使用split()将字符串用空格分开
  2. 但字符串中可能有连续多个空格,所以再用filter筛选出不为空的项
  3. 再返回数组中最后一项的长度即可

代码

const lengthOfLastWord = s => {
    const arr = s.split(' ').filter(item => item != '');
    return arr[arr.length - 1].length;
};

方法二:反向遍历

思路

  1. 直接反向遍历
  2. 先跳过空字符
  3. 从第一个不是空的字符开始计数
  4. 若再遇到空字符,停止
  5. 注意边界条件

代码

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;
};

方法三

使用trim的方法去除空白部分,然后分割空格键取最后一个选项长度

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

方法四

正则match 全局匹配

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
  let letter = s.match(/\w+/g);
  return letter[letter.length - 1].length;
};