关于leetcode:力扣之最后一个单词的长度

39次阅读

共计 1271 个字符,预计需要花费 4 分钟才能阅读完成。

问题形容

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

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

示例 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”。

力扣原题目地址:https://leetcode.cn/problems/…

解决方案

计划一 去空格加空格顺叙遍历计数

因为题目是求最初一个单词的长度,所以要顺叙遍历,而后呈现一个字母词,就记一个数。当遇到空格的时候,阐明单词完结(为了以防万一,所以手动在单词的最左侧增加一个空格)

var lengthOfLastWord = function (s) {
    // 1. 先把左右空格都去掉,再手动增加一个左空格。之所以增加左空格是因为遍历到空格时,就进行遍历
    s = ' ' + s.trimEnd() // 2. 遍历到空格时候,阐明一个单词正好实现了
    let n = 0 // 3. 定义一个 n 用来统计次数
    for (let i = s.length - 1; i >= 0; i--) { // 4. 因为求最初一个单词的长度,所以顺叙遍历即可。留神 i 要 >=0,只 >0 就会少统计一次
        if (s[i] == ' ') { // 5. 若是遇到空格了,就间接返回已统计好的次数,即:单词的长度
            return n
        } else { // 6. 没遇到空格阐明是单词,那么就统计单词的词个数
            n = n + 1
        }
    }
};

计划二 去空格转数组,并获得最初一项的长度

去空格转数组,并获得最初一项的长度,最初的一项即为最初一个单词

var lengthOfLastWord = function (s) {s = s.trim().split(' ') // 1. 去空格,并依照空格把字符串转成数组
    return s.at(-1).length // 2. 获取数组的最初一项(即倒数第一项),即为最初一个单词
};

数组的 Array.prototype.at() 办法回顾

平时咱们获取数组的最初一项的值,个别都是这样写:

let arr = ['aaa','bbb','ccc']
arr[arr.length - 1] // 'ccc'

不过 at() 办法其实会更加不便

at() 办法接管一个整数值并返回该索引的我的项目,容许负数和正数。负整数从数组中的最初一个我的项目开始倒数。array[0]将返回第一个我的项目。然而,对于前面的我的项目,不要应用 array.length,例如,对于最初一个我的项目,能够调用array.at(-1) 故:

let arr = ['aaa','bbb','ccc']
arr.at(-1) // 'ccc'

Array.prototype.at()官网文档:https://developer.mozilla.org…

不过 at 办法只实用取值,不能进行赋值更改 …

正文完
 0