这个问题要求我们找到给定字符串 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”。
代码:
class Solution {
// 计算字符串中最后一个单词的长度
public int lengthOfLastWord(String s) {
// 初始化指针指向字符串末尾
int endIndex = s.length() - 1;
// 跳过字符串末尾的所有空格
while (endIndex >= 0 && s.charAt(endIndex) == ' ') {
endIndex--;
}
// 初始化起始指针,标记最后一个单词的起始位置
int startIndex = endIndex;
// 从endIndex开始向前移动,直到遇到空格或字符串开头
while (startIndex >= 0 && s.charAt(startIndex) != ' ') {
startIndex--;
}
// 计算最后一个单词的长度:endIndex - startIndex
// 需要加1,因为startIndex指向单词前的空格或字符串起始位置的前一位
return endIndex - startIndex;
}
}
算法解释
- 去除尾部空格:从字符串末尾开始向前遍历,跳过所有空格,定位到最后一个单词的末尾字符
- 定位单词起始:从末尾字符继续向前遍历,直到遇到空格或字符串开头,确定单词的起始位置
- 计算长度:通过起始和结束位置的差值计算单词长度
时间复杂度: O (n) - 最多遍历两次字符串
空间复杂度: O (1) - 仅需常数级额外空间