题目介绍
给你一个字符串
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
中至少存在一个单词
思路讲解
这是一道字符串的问题,关于字符串问题,我个人有个小技巧是先看示例,通过示例来分析题目中我们将会遇到多少种不同情况。
示例 2:
输入:s = " fly me to the moon " 输出:4 解释:最后一个单词是“moon”,长度为 4。
这个题目中示例二是最奇怪的,只要满足它这种特殊情况,其他情况又能被考虑到,所以我们来分析它的要求。
在示例二,题目告诉我们单词间是由空格的,且这空格在哪里、有几个都是不确定的。
我们可以从字符串末尾入手,首先想办法将末尾的空格都去掉,这时候我们可以求字符串的总长度,从末尾开始遍历,遇到第一个不是空格的元素就是最后一个单词的最后一个字符的位置。
int i = strlen(s) - 1;
while (s[i] == ' ') {
i--;
}
之后,我们可以发现,每个单词都是由空格隔开的,所以只要我们继续从最后一个单词的最后一个字符开始遍历,找到的第一个空格的后一个元素,就是最后一个单词的第一个字符。
int j = i - 1;
while (j >= 0 && s[j] != ' ') {
j--;
}
单词的长度就是
最后一个字符的位置-第一个字符的位置+1
但是j是最后字符的前一个位置,所以最后的答案是i-j就行了
return i - j;
知识点讲解
这题没有用到什么特别的知识点,只要注意分析题目时条理清晰就行了。
还是做字符串题时很多时候特殊情况是我们不看示例很难考虑到的,记得做字符串题可以先看例题。