这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战
题目描述
有一个字符串,里面包含数量不等的单词,然后各个单词是由空格组成的,现在需要找到该字符串最后一个单词,并返回该单词的长度。
补充:字符串都是由英文字母和空格' '组成。
举个例子:
字符串:‘abc aaaa’
返回:4
字符串:‘ab aaa ’
返回:3
字符串:‘aaaaaa b c ddddd’
返回:5
思路分析
第一种方法
既然字符串是由空格' '间隔的,那么我们可以使用字符串的split方法,以' '格式把它分割成数组,然后再用reverse方法把该数组反转。
最后调用数组的find方法,找到第一个元素不等于空字符串,这个就是最后一个单词,然后返回它的长度即可。
/**
* @param {string} s
* @return {number}
*/
var lengthOfLastWord = function (s) {
var arr = s.split(' ').reverse()
return arr.find(item => item !== '').length
};
第二种方法
第一种方法是把它转成数组,然后调用数组的方法来处理的,稍微有点绕。
第二种方法可以使用正则表达式,匹配字符串的末尾,然后末尾可能会有空格,最后才是单词。所以,正则表达式可以写成/(\w+)\s*$/,获取到$1, 把$1赋值给之前声明的变量,最后把它的长度返回即可。
/**
* @param {string} s
* @return {number}
*/
var lengthOfLastWord = function (s) {
let str = ''
s.replace(/(\w+)\s*$/, ($0, $1) => {
str = $1
})
return str.length
};
第三种方法
这个方法是使用while循环对数组从后面开始遍历,找到第一个不是' '的元素,并记录当前的索引i。
然后继续使用while循环遍历,另外声明一个变量j,用它来记录最后一个单词的长度。
在while循环中,然后需要满足i要大于等于j(不然会有无限循环),然后要找到下一个等于' '的元素的索引
找不到的话,j就一直加一。
找到就退出while循环。
然后此时的j就是最后一个单词的长度。
var lengthOfLastWord = function (s) {
var i = s.length - 1
while (s[i] === ' ') {
i--
}
var j = 0
while (i >= j && s[i - j] !== ' ') {
j++
}
return j
};