算法练习第17道-最后一个单词的长度

Offer 驾到,掘友接招!我正在参与2022春招系列活动-刷题打卡任务,点击查看活动详情

题目

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

来源:力扣(LeetCode) 链接:leetcode-cn.com/problems/le… 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是“World”,长度为5。


示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是“moon”,长度为4。

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为6的“joyboy”。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/length-of-last-word
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

复制代码

思路分析

思路1

  • 首先去除字符的前后空格 trim()
  • 然后对中间的字符开始以空格切割
  • 拿到切割数组,并获取长度
  • 拿长度减1,拿数组的最后一个字符串
  • 把字符串切割,获取长度

思路2

  • 首先去除字符的前后空格 trim(),这里其实不需要去除前边的空格,我们换为trimEnd()

思路3

反向遍历

  • 首先还是去除字符的前后空格
  • 因为我们是通过下标拿值的,所以就是字符长度-1
  • 拿到长度后,开始去除字符前后的空格长度,
  • 现在开始从最后开始比较,一个计数器,
  • 开始从后边循环,如果当前值大于0,且当前值不等于空,计数器叠加,不满足条件时返回值

代码

代码1

let lengthOfLastWord = function(s) {
  /**
   * 首先去除字符的前后空格 trim()
   * 然后对中间的字符开始以空格切割
   * 拿到切割数组,并获取长度
   * 拿长度减1,拿数组的最后一个字符串
   * 把字符串切割,获取长度
   * 
   * */ 
  let arr = s.trim().split(' ')
  let lastIndex = arr.length - 1
  return arr[lastIndex].split('').length
}
复制代码

代码2

let arr = s.trimEnd().split(' ')
复制代码

代码3

/**
   * 首先还是去除字符的前后空格
   * 因为我们是通过下标拿值的,所以就是字符长度-1
   * 拿到长度后,开始去除字符前后的空格长度,
   * 现在开始从最后开始比较,一个计数器,
   * 开始从后边循环,如果当前值大于0,且当前值不等于空,计数器叠加,不满足条件时返回值
   * */ 
  let index = s.length - 1
  console.log(index)
  while (s[index] === ' ') {
    console.log(index)
      index--
  }
  let wordLength = 0
  while (index >= 0 && s[index] !== ' ') {
      wordLength++
      index--
  }
  return wordLength
复制代码

测试结果

测试结果 trim()

image.png

测试结果 trimEnd()

image.png

测试结果 - 反向遍历

image.png

猜你喜欢

转载自juejin.im/post/7080144856512741406