在问 · 算法题解

58. 最后一个单词的长度

题目描述

输入字符串 s,它只由英文字母和空格组成。单词是一段连续的字母,两侧是空格或字符串边界。单词之间可能隔着多个空格,开头和结尾也可能有空格。

返回 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

解释:最后一个单词是 joyboy,长度 6。

数据范围

  • 1 <= s.length <= 10^4
  • s 只含英文字母和空格 ' '。
  • s 里至少有一个单词。

解题思路

从右往左反向扫描,分两段。第一段跳过末尾的空格,让 i 停在最后一个单词的最后一个字母上。第二段继续向左数非空格字符,遇到空格或走出字符串就停,数到的就是答案。

为什么正确

第二段循环中,s[i+1 : i+1+length] 全是字母,属于最后一个单词。

复杂度分析

时间 O(尾部空格数 + 最后一个单词长度),最坏 O(n);空间 O(1)。

易错点

尾部可能有空格,不能一上来就数;字符串也可能只有一个单词,第二段循环必须检查 i >= 0,否则会越界(Python 中 s[-1] 还会惄悄绕回末尾)。

参考代码

Python、Java、C++、Go、JavaScript、TypeScript 六种语言,逻辑一致。

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        i = len(s) - 1
        while i >= 0 and s[i] == ' ':
            i -= 1
        length = 0
        while i >= 0 and s[i] != ' ':
            length += 1
            i -= 1
        return length

载入编辑器,自己跑一遍 →

字符串 专题的其他题目

查看 字符串 全部题目 →