题目
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。
示例
输入: “Hello World”
输出: 5
C++代码
采用了rfind()函数,从后向前查找’ '并返回其位置。
注意几个特殊情况:("_“表示” ")
- 形如"_"和“___________”
- 形如“aaaa_”和“aaaa________ ”
- 形如“aaaa”和“ aaaa__________”
重点都在于当字符串末尾存在一个或多个’ '时,如何求最后一个单词的长度
此外还要注意字符串的长度和下标之间的关系。
class Solution {
public:
int lengthOfLastWord(string s) {
size_t pos=s.rfind(" ");
if(pos==string::npos) return s.length(); //若没找到空格
else if(pos==s.length()-1) //若最后一位是空格
{
for(int i=1;i<s.length();i++)
{
size_t temp=s.rfind(" ",s.length()-1-i); //从后往前第i位开始查找' '
if(temp==string::npos) return s.length()-i;
if(temp!=pos-i) //当两个' '不相邻,说明它们之间一定有一个单词,则位置之差即为单词长度
{
return pos-i-temp;
}
}
return 0; //若全为' ',则返回0
}
else return s.length()-1-pos; //存在空格且最后一位不为' ',说明最后一个空格之后有一个单词
}
};