开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情
前言
从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!
一、题目描述
给你一个字符串 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 <= 104s仅有英文字母和空格' '组成s中至少存在一个单词
二、思路分析
先开始还是没什么头绪,让人烦恼的是这题会出现两种情况,一种是最末尾是空格,一种是最末尾是字符。这两种情况要分别处理,那就要把程序写得很长,而且还很容易出错。
后来看了别人的做法,才明白,可以先把空格给筛除掉,而且字母的长度也不必非要拘束于使用两个数相减之差的形式,而是专门创建一个变量,在找到了末尾第一个非空字符后,每再找到一个,变量加一,最后返回变量即可。
三、AC代码
class Solution {
public:
int lengthOfLastWord(string s) {
int q=0,p;
reverse(s.begin(),s.end());
for(int j=0;j<s.size();j++){
if(s[j]!=' '){
p=j;
break;
}
}
while(s[p]!=' '&&p<s.size()){
p++;
q++;
}
return q;
}
};
四、总结
下一次遇见这种题一定要做出来。思路还是太僵硬了,做题做得少,也没及时总结。