LeetCode第58题_最后一个单词的长度
- 电脑硬件
- 2025-09-19 11:21:02

LeetCode 第58题:最后一个单词的长度 题目描述
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
难度简单
题目链接点击在LeetCode中查看题目
示例 示例 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⁴s 仅有英文字母和空格 ' ' 组成s 中至少存在一个单词 解题思路 方法一:从后向前遍历这道题的关键是要处理好字符串末尾的空格和单词的边界。从后向前遍历是一个很好的选择。
关键点:
从字符串末尾开始遍历,跳过末尾的空格统计连续的非空格字符数量遇到空格或到达字符串开头时停止具体步骤:
初始化单词长度为0从字符串末尾开始向前遍历,跳过末尾的空格继续向前遍历,统计连续的非空格字符,直到遇到空格或到达字符串开头返回统计的字符数量时间复杂度:O(n),其中n是字符串的长度 空间复杂度:O(1),只需要常数级别的额外空间
方法二:分割字符串另一种思路是使用字符串分割函数,但这种方法的空间复杂度较高。
具体步骤:
使用字符串分割函数将字符串按空格分割成数组过滤掉空字符串返回最后一个单词的长度时间复杂度:O(n) 空间复杂度:O(n),需要存储分割后的字符串数组
代码实现 C# 实现(从后向前遍历) public class Solution { public int LengthOfLastWord(string s) { int length = 0; int i = s.Length - 1; // 跳过末尾的空格 while (i >= 0 && s[i] == ' ') { i--; } // 统计最后一个单词的长度 while (i >= 0 && s[i] != ' ') { length++; i--; } return length; } } C# 实现(分割字符串) public class Solution { public int LengthOfLastWord(string s) { string[] words = s.Split(' ', StringSplitOptions.RemoveEmptyEntries); return words[words.Length - 1].Length; } } 执行结果 方法一(从后向前遍历): 执行用时:52 ms内存消耗:36.7 MB 方法二(分割字符串): 执行用时:64 ms内存消耗:37.1 MB 代码亮点 🎯 从后向前遍历的方法避免了额外的空间开销💡 跳过末尾空格的处理很巧妙🔍 边界条件处理完善🎨 代码结构清晰,易于理解 常见错误分析 🚫 没有处理字符串末尾的空格🚫 没有处理字符串全是空格的情况🚫 使用Split方法时没有正确处理空字符串🚫 遍历时的边界条件判断错误 解法对比 解法时间复杂度空间复杂度优点缺点从后向前遍历O(n)O(1)空间效率高,实现简单需要仔细处理边界条件分割字符串O(n)O(n)代码简洁,易于理解空间开销较大 相关题目 LeetCode 151. 反转字符串中的单词 - 中等LeetCode 557. 反转字符串中的单词 III - 简单LeetCode 434. 字符串中的单词数 - 简单LeetCode第58题_最后一个单词的长度由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“LeetCode第58题_最后一个单词的长度”