【题目】
给你一个字符串 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 <=
s仅有英文字母和空格' '组成s中至少存在一个单词
【题目解析】
解题方法
本问题的核心在于如何快速定位到字符串中的最后一个单词,并计算其长度。为此,我们采取的方法是逆向遍历字符串。具体步骤如下:
- 从字符串的末尾开始向前遍历,首先跳过所有的空格字符,以找到最后一个单词的末尾。
- 继续遍历,直到遇到另一个空格或字符串的开头,计算这个过程中遍历的字符数量,即为最后一个单词的长度。
这个方法避免了对字符串的全面扫描,尤其是当最后一个单词之前有大量空格时,可以显著提高效率。
class Solution:
def lengthOfLastWord(self, s: str) -> int:
length = 0
index = len(s) - 1
# 跳过末尾的空格
while index >= 0 and s[index] == ' ':
index -= 1
# 计算最后一个单词的长度
while index >= 0 and s[index] != ' ':
length += 1
index -= 1
return length
执行效率
【总结】
适用问题类型
- 字符串处理问题:特别是那些需要从字符串的尾部开始分析或提取信息的问题,如反转字符串、找到最后一个特定字符或单词的位置等。
- 文本分析:在处理自然语言文本、日志文件等含有大量单词或条目的字符串时,这种方法同样适用。
解决算法:逆向遍历
-
算法描述:从字符串的末尾开始,逆向遍历整个字符串,通过特定的条件判断来实现对字符串尾部信息的提取或分析。
-
关键步骤:
- 识别并跳过尾部无关字符(如空格)。
- 计算并提取所需信息(如最后一个单词的长度)。
- 在遇到分隔符或字符串开始处停止遍历。
算法特点
- 高效性:能够直接定位到关键信息的位置,避免了对整个字符串的全面扫描。
- 简洁性:代码实现简单,逻辑清晰易懂。
- 通用性:适用于各种需要从尾部处理字符串的场景。
时间复杂度与空间复杂度
- 时间复杂度:
O(N),其中N是字符串的长度。在最坏的情况下,算法需要遍历整个字符串一次。 - 空间复杂度:
O(1),算法运行过程中仅使用了常数级别的额外空间。
实践意义
- 编程技巧提升:掌握逆向遍历字符串的方法有助于提高解决字符串处理问题的能力,尤其是在面对性能优化需求时。
- 算法思维培养:通过逆向思考问题,寻找解决问题的高效路径,有助于培养解决复杂问题的算法思维。
- 广泛的应用场景:在文本分析、日志处理、数据清洗等领域,逆向遍历字符串的方法都有其独特的应用价值。
综上所述,通过逆向遍历字符串解决"最后一个单词的长度"问题,不仅展示了一种高效的算法实现,也提供了一种值得学习的编程技巧和思维方式,对于提升编程实践能力具有重要的意义。