58.最后一个单词的长度(c++)

116 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

前言

从零开始学习c++,每天起码做一道leetcode题目,在此记录,希望最后能够有所收获!

一、题目描述

58.最后一个单词的长度

给你一个字符串 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 <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • 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;
    }
};

四、总结

下一次遇见这种题一定要做出来。思路还是太僵硬了,做题做得少,也没及时总结。