58.最后一个单词的长度
目录
一、问题描述
二、解题思路
三、代码
四、复杂度分析
一、问题描述
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
二、解题思路
我们可以从字符串的 末尾向前遍历:
-
跳过末尾的空格,因为末尾可能有很多多余空格。
-
开始计数字母个数,直到遇到第一个空格或字符串开头,说明找到了最后一个单词。
-
返回计数值即可。
三、代码
class Solution {
public:int lengthOfLastWord(string s) {int length = 0; //用于记录最后一个单词的长度int i = s.size() - 1; //从字符串末尾开始向前遍历//第一步,跳过字符串末尾的空格while(i >= 0 && s[i] == ' '){--i;}//第二步,开始统计最后一个单词的长度while(i >= 0 && isalpha(s[i])){++length; //遇到字母就增加长度计数--i; //向前继续遍历}return length; //返回最后一个单词的长度}
};
四、说明
-
isalpha(c)
是 C++ 中判断字符是否为英文字母的函数; -
若字符串全为空格,或不包含单词,会返回 0(符合预期);
-
时间复杂度:O(n),最多遍历一次字符串;
-
空间复杂度:O(1),只用了常数空间。