算法题每日一练---第105天:最后一个单词的长度

165 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

一、问题描述

给你一个字符串 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.字符串
2.建议用时10~25min

三、问题分析

题目要求我们最后一个单词的长度,其中单词中间的空格不确定。对于这一题,我们可以使用反向思维,从后向前遍历,寻找最后一个单词并计算其长度。

对于s中至少存在一个字符串,所以不会出现结果为空的情况。

  • 第一步,从后向前遍历字符串,吸收掉多余的字符串
  • 第二步,顺应着第一步的结果,继续向后遍历。遇到字母,计数器+1,如果遇到空格的话,那么就退出此时的循环,输出结果。

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

四、编码实现

class Solution {
public:
    int lengthOfLastWord(string s) {
        int i,n=s.size()-1,ans=0;//初始化数据
        while(s[n]==' ')//去除掉末尾的空格
            n--;
        for(i=n;i>=0;i--)//遍历剩下的元素
        {
            if(s[i]!=' ')
                ans++;
            else//为空格,退出遍历
                break;   
        }
        return ans;//返回结果
    }
};

五、测试结果

1.png

2.png

19.png