leetcode每天一题:【最后一个单词的长度】(简单)

439 阅读2分钟

这是我参与2022首次更文挑战的第21天,活动详情查看:2022首次更文挑战

题目描述

leetcode地址

有一个字符串,里面包含数量不等的单词,然后各个单词是由空格组成的,现在需要找到该字符串最后一个单词,并返回该单词的长度。

补充:字符串都是由英文字母和空格' '组成。

举个例子:

字符串:‘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
};

image.png

第二种方法

第一种方法是把它转成数组,然后调用数组的方法来处理的,稍微有点绕。

第二种方法可以使用正则表达式,匹配字符串的末尾,然后末尾可能会有空格,最后才是单词。所以,正则表达式可以写成/(\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
};

image.png

第三种方法

这个方法是使用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
};

image.png