代码训练LeetCode(29)最后一个单词的长度
代码训练(29)LeetCode之最后一个单词的长度
Author: Once Day Date: 2025年6月11日
漫漫长路,才刚刚开始…
全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客
参考文章:
- 58. 最后一个单词的长度 - 力扣(LeetCode)
- 力扣 (LeetCode) 全球极客挚爱的技术成长平台
文章目录
- 代码训练(29)LeetCode之最后一个单词的长度
- 1. 原题
- 2. 分析
- 3. 代码实现
- 4. 总结
1. 原题
给你一个字符串
s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
提示:
1 <= s.length <= 104
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
解释:最后一个单词是长度为 6 的“joyboy”。
2. 分析
题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。
解题思路:
- 去除尾部空格:从字符串末尾开始,去除所有空格,确保字符串以最后一个单词结束。
- 计算最后一个单词的长度:继续从末尾向前遍历,直到遇到空格或字符串的开头,这样可以得到最后一个单词的长度。
分析步骤:
-
首先,从字符串末尾开始遍历,忽略掉所有的空白字符。
-
然后,从第一个非空白字符开始,计数直到再次遇到空白字符或字符串的起始位置。
-
计数的结果即为最后一个单词的长度。
例如,对于输入 " fly me to the moon "
:
- 移除尾部空格后变为
" fly me to the moon"
- 最后一个单词是
"moon"
,从后往前数,长度为4。
性能优化关键点:
- 尽可能减少遍历次数:只需从后向前遍历一次字符串。
- 避免使用额外的空间:直接在原字符串上操作,不使用额外的存储结构。
3. 代码实现
#include <stdio.h>
#include <string.h>int lengthOfLastWord(const char *s) {int len = strlen(s);int lastWordLength = 0;int i = len - 1;// Skip trailing spaceswhile (i >= 0 && s[i] == ' ') {i--;}// Count the length of the last wordwhile (i >= 0 && s[i] != ' ') {lastWordLength++;i--;}return lastWordLength;
}int main() {char input[] = " fly me to the moon ";int result = lengthOfLastWord(input);printf("Length of the last word: %d\n", result);return 0;
}
4. 总结
这个问题考察了对字符串操作的基础能力,特别是如何有效地处理和遍历字符串。通过这种类型的问题,可以加深对字符串处理函数如 strlen
的理解,并提升处理边界情况的能力。要进一步提升编程能力,练习更多关于字符串处理的题目是非常有帮助的,同时也可以学习更多关于内存和性能优化的技巧。