持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情
一、问题描述
给你一个字符串 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.字符串
2.建议用时10~25min
三、问题分析
题目要求我们最后一个单词的长度,其中单词中间的空格不确定。对于这一题,我们可以使用反向思维,从后向前遍历,寻找最后一个单词并计算其长度。
对于s
中至少存在一个字符串,所以不会出现结果为空的情况。
- 第一步,从后向前遍历字符串,吸收掉多余的字符串
- 第二步,顺应着第一步的结果,继续向后遍历。遇到字母,计数器
+1
,如果遇到空格的话,那么就退出此时的循环,输出结果。
提示:
1 <= s.length <= 104
s
仅有英文字母和空格' '
组成s
中至少存在一个单词
四、编码实现
class Solution {
public:
int lengthOfLastWord(string s) {
int i,n=s.size()-1,ans=0;//初始化数据
while(s[n]==' ')//去除掉末尾的空格
n--;
for(i=n;i>=0;i--)//遍历剩下的元素
{
if(s[i]!=' ')
ans++;
else//为空格,退出遍历
break;
}
return ans;//返回结果
}
};