给你一个字符串 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
中至少存在一个单词
步骤1:定义问题性质
输入输出条件
- 输入:一个字符串
s
,由若干单词组成,单词之间用空格隔开。字符串的长度在1
到10^4
之间。 - 输出:最后一个单词的长度,返回一个整数。
限制
- 字符串
s
只包含英文字母和空格。 - 字符串中至少存在一个单词。
边界条件
- 字符串可能包含前后空格。
- 字符串的长度可能达到最大值(
10^4
),需考虑性能。
步骤2:问题分解
将问题分解为以下几个步骤:
- 去除字符串两端的空格:使用内置的字符串函数来确保没有多余的空格干扰。
- 从后向前遍历字符串:找到最后一个单词的起始位置和结束位置。
- 计算最后一个单词的长度:从找到的起始位置和结束位置进行长度计算。
解决方案逻辑
- 去除两端空格:可使用
std::string::erase
和std::find_if
或者直接使用 C++11 及以上的std::string::trim
方法(若有)。 - 从后向前遍历:使用循环,从最后一个字符向前查找,直到遇到空格。
- 长度计算:通过找到的起始和结束位置计算长度。
算法设计
- 时间复杂度:O(n),因为我们需要遍历字符串一遍。
- 空间复杂度:O(1),只使用了固定数量的额外空间。
这种方法是最有效的,因为我们只需对字符串进行一次遍历,且不需要额外的存储结构。
步骤3:C++代码实现
第二种做法,直接统计最后一个单词的单词数量.
步骤4:算法启发
通过解决这个问题,我们可以得到以下启发:
- 字符串处理技巧:掌握如何去除空格和遍历字符串,对于其他字符串处理问题同样适用。
- 效率提升:在处理大规模数据时,理解时间和空间复杂度的概念可以帮助我们选择最佳算法。
- 边界条件处理:学习如何处理字符串边界情况对于编写鲁棒代码至关重要。
步骤5:实际应用分析
应用示例
在自然语言处理(NLP)领域,确定文本中最后一个单词的长度可以用于多种用途:
- 文本分析:在分析用户输入时,了解最后一个单词的长度可以帮助推测用户的意图。
- 搜索引擎优化:在处理用户查询时,搜索引擎可以使用此算法来优化用户体验,根据输入的最后一个单词调整搜索结果。
具体实现
例如,考虑一个聊天机器人应用,机器人需要根据用户输入的最后一个单词生成响应。利用上述算法,机器人可以快速获取用户最新意图并给出合适的回复。通过提高响应速度和准确度,可以显著提升用户体验。