全栈开发知识库

19.最后一个单词的长度

题目

给你一个字符串 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”。

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

思路

从最后一个字母开始往前遍历,并开始计数,找到第一个空格的时候停止。要注意没有空格的情况,例如"ab",应该返回2。

class Solution {
    public int lengthOfLastWord(String s) {
        int end = s.length() - 1;
        while(end >= 0 && s.charAt(end) == ' ') end--;
        if(end < 0) return 0;
        int start = end;
        while(start >= 0 && s.charAt(start) != ' ') start--;
        return end - start;
    }
}
class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        length = 0
        for i in reversed(range(len(s.rstrip()))):
            if s.rstrip()[i] == " ":
                return length
            else:
                length += 1
        return length    
class Solution {
    fun lengthOfLastWord(s: String): Int {
        var last = s.length - 1
        while (last >= 0 && s[last] == ' ') {
            // 到最后一个非空字符上
            last --
        }
        var length = 0

        while (last >= 0 && s[last] != ' ') {
            // 继续往前找到不是空格的字符,并记录长度
            length ++
            last --
        }
        return length
    }
}

复杂度分析:

  • 时间复杂度:O(n),其中 n 是字符串的长度。最多需要反向遍历字符串一次。

  • 空间复杂度:O(1)。

  • 下一篇


  • 邮箱 :charon.chui@gmail.com
  • Good Luck!