【每日算法】力扣58. 最后一个单词的长度

174 阅读2分钟

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

描述

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

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

示例 1:

输入:s = "Hello World"
输出:5
示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
示例 3:

输入:s = "luffy is still joyboy"
输出:6

做题

思路

因为这道题给出的字符串是由若干单词组成的,单词之间是有空格的。

这道题只能从后往前去遍历,当遇到一个空格的时候,就说明这个单词已经被我们遍历完了。

but,题目给出的示例中就有字符串的末尾也有空格的,所以我们要越过这些空格。

我们不需要把字符串转成一个 char 数组,只需要使用 String.charAt(index) 来获取当前的字符就可以了。

举例演示

s = "the moon ", index = 9;

首先,我们要越过后面的两个空格。

从右往左循环

s 的第 9 和 8 位字符都是空格,跳过。

index = 7,lastWordLength = 0;

'n' != ' ',index--,lastWordLength++;

index = 6,lastWordLength = 1;

'o' != ' ',index--,lastWordLength++;

index = 5,lastWordLength = 2;

'o' != ' ',index--,lastWordLength++;

index = 4,lastWordLength = 3;

'm' != ' ',index--,lastWordLength++;

index = 3,lastWordLength = 4;

接下来一位就是空格了,所以最后一个单词的长度为 4。

运行的代码

public int lengthOfLastWord(String s) {
    int r = s.length() - 1;
    //因为有字符串末尾有空格的情况,所以这里先去除掉末尾的空格
    while(s.charAt(r) == ' '){
        // 从末尾开始,遇到空格就跳过
        r--;
    }
    // 这时的 r 就是我们要开始判断最后一个单词长度的起点
    int lastWordLength = 0;
    while(r >= 0 && s.charAt(r--) != ' '){
        lastWordLength++;
    }
    return lastWordLength;
}

image.png

踩过的坑

我做这道题时,没有踩过坑,我相信各位小伙伴也是一遍过的吧,没有遇到什么奇奇怪怪的坑。

最后

今天就到这里了。

这里是程序员徐小白,【每日算法】是我新开的一个专栏,在这里主要记录我学习算法的日常,也希望我能够坚持每日学习算法,不知道这样的文章风格您是否喜欢,不要吝啬您免费的赞,您的点赞、收藏以及评论都是我下班后坚持更文的动力。