leetcode刷题记录-58. 最后一个单词的长度

110 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情

前言

今天的题目为简单,算是比较常见的一种简单题型,做题的方法有很多,本文举了两种比较简单的方法。

每日一题

今天的题目是 58. 最后一个单词的长度,难度为简单

  • 给你一个 m x n 的整数网格 accounts ,其中 accounts[i][j] 是第 i 位客户在第 j 家银行托管的资产数量。返回最富有客户所拥有的 资产总量 。

  • 客户的 资产总量 就是他们在各家银行托管的资产数量之和。最富有客户就是 资产总量 最大的客户。

 

示例 1:

输入:accounts = [[1,2,3],[3,2,1]]
输出:6
解释:
第 1 位客户的资产总量 = 1 + 2 + 3 = 62 位客户的资产总量 = 3 + 2 + 1 = 6
两位客户都是最富有的,资产总量都是 6 ,所以返回 6

示例 2:

输入:accounts = [[1,5],[7,3],[3,5]]
输出:10
解释:
第 1 位客户的资产总量 = 62 位客户的资产总量 = 103 位客户的资产总量 = 82 位客户是最富有的,资产总量是 10

示例 3:

输入:accounts = [[2,8,7],[7,1,3],[1,9,5]]
输出:17

 

提示:

  • m == accounts.length
  • n == accounts[i].length
  • 1 <= m, n <= 50
  • 1 <= accounts[i][j] <= 100

题解

API解法

我们需要获取到由单词组成的一个字符串的最后一个单词,其中单词都是用空格隔开的,那么第一时间想到了 split 方法,可以根据空格来分隔字符串,分隔之后我们拿到一个由字符串组成的数组,获取数组的最后一项返回长度,就是题目需要的答案。

实际操作之后会发现,题目给的用例中,单词之间的空格不一定是都一个空格,可能是多个,这就会影响到答案的判断,因为如果最后一个单词后面有超过两个的空格,那么就会变成空格作为数组的最后一位,所以这时候就需要另个一个数组方法 filter 来删除数组中无用的空白元素。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    var arr = s.split(' ').filter(item => {
        if(item != '') {
            return true
        }
    })
    return arr[arr.length -1].length
};

image.png

反向遍历字符串

我们还可以返现遍历题目给的字符串,忽略掉尾部的空格,直接计算出最后一个单词的长度,知道再次遇到空格说明当前单词结束。

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function (s) {
  let res = 0;
  let a = 0;
  for (let i = s.length - 1; i >= 0; i--) {
    if (s[i] == " " && a == 0) {
      continue;
    }
    if (s[i] != " ") {
      res++;
      a = 1;
    }
    if (s[i] == " " && a == 1) {
      break;
    }
  }
  return res;
};

image.png