小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
题目
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入: s = "Hello World" 输出: 5
示例 2:
输入: s = " fly me to the moon " 输出: 4
示例 3:
输入: s = "luffy is still joyboy" 输出: 6
提示:
1 <= s.length <= 104s仅有英文字母和空格' '组成s中至少存在一个单词
方法一:分隔字符串
思路
- 首先使用
split()将字符串用空格分开 - 但字符串中可能有连续多个空格,所以再用
filter筛选出不为空的项 - 再返回数组中最后一项的长度即可
代码
const lengthOfLastWord = s => {
const arr = s.split(' ').filter(item => item != '');
return arr[arr.length - 1].length;
};
方法二:反向遍历
思路
- 直接反向遍历
- 先跳过空字符
- 从第一个不是空的字符开始计数
- 若再遇到空字符,停止
- 注意边界条件
代码
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;
};