LeetCode58 最后一个单词的长度

题目

给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例

输入: “Hello World”
输出: 5

C++代码

采用了rfind()函数,从后向前查找’ '并返回其位置。
注意几个特殊情况:("_“表示” ")

  1. 形如"_"和“___________”
  2. 形如“aaaa_”和“aaaa________ ”
  3. 形如“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; //存在空格且最后一位不为' ',说明最后一个空格之后有一个单词
    }
};

猜你喜欢

转载自blog.csdn.net/Fang_D/article/details/83064355
今日推荐