【Classic 150 刷题计划】 LeetCode 58. 最后一个单词的长度 | C++ 极简反向遍历与单变量状态机

LeetCode 58. 最后一个单词的长度

📌 题目描述

题目级别:简单

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

  • 示例 1:
    输入:s = " fly me to the moon "
    输出:4
    解释:最后一个单词是 "moon",长度为 4。

💡 破题思路:反向遍历 (单变量状态机)

既然题目要求找"最后一个"单词,最符合直觉且最高效的策略必然是从右向左(反向)遍历 。

在这个过程中,我们只需要应对两种物理情况:

  1. 尾部空格:字符串的最后面可能跟着一堆没用的空格,必须无视它们。
  2. 目标单词:跳过尾部空格后,遇到的第一串连续字母就是目标单词,数完它的长度后,立刻终止程序。

核心技巧:Dual-purpose Variable (双重用途变量)

我们可以用一个单纯的整型变量 f,同时扮演两个角色:

  • 角色 1(状态旗帜) :当 f == 0 时,说明我们还在"尾部空格区"摸黑前进;当 f > 0 时,说明我们已经进入了"目标单词区"。
  • 角色 2(长度计数器) :在进入"目标单词区"后,每遇到一个字母,f 就加 1。直到再次遇到空格,说明单词数完了,直接返回 f 即可!

💻 C++ 代码实现 (原汁原味作者版)

cpp 复制代码
class Solution {
public:
    int lengthOfLastWord(string s) {
        int n = s.size();
        // f 兼具"是否开始计数"的布尔状态,以及"单词长度"的累加功能
        int f = 0;

        // 从字符串的最末尾开始,向左倒序遍历
        for (int i = n - 1; i >= 0; i -- )
        {
            // 阶段 1:如果还没碰到过字母 (f == 0),且当前是空格,说明这是尾部无用空格,直接跳过
            if (!f && s[i] == ' ') continue;
            
            // 阶段 2:如果碰到了非空格字符(字母)
            else if (s[i] != ' ')
            {
                // 长度累加,同时打破了 !f 的条件,状态切换为"计数中"
                f ++ ;
            }
            
            // 阶段 3:如果 f 已经大于 0,且当前遇到了空格
            // 说明我们刚刚完整地数完了一个单词,前方的空格是单词之间的分隔符
            // 果断直接返回结果,干脆利落!
            else return f;
        }

        // 边界扫尾:如果整个字符串就只有一个单词,且前面没有多余空格,循环结束后返回 f
        return f;
    }
};
相关推荐
胡家伟++7 小时前
我用 48 轮 AI 思维链做了一次研究战略推演:从“验证信号危机“到“验证栈“统一框架
人工智能·算法
朝朝辞暮i7 小时前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
垆边人似月.8 小时前
华为题:污染水域
算法
All for pursuit.8 小时前
【回溯-6】79.单词搜索
数据结构·c++·算法·leetcode
ZhangJun958 小时前
Mobike 共享单车分析项目
人工智能·python·算法·kmeans·聚类·knn
Navigator_Z8 小时前
LeetCode //C - 1281. Subtract the Product and Sum of Digits of an Integer
c语言·算法·leetcode
薛定e的猫咪8 小时前
(AISTATS 2023)BaCaDI 逐章阅读
人工智能·深度学习·算法·机器学习
Benny_Tang8 小时前
AT_arc180_d [ARC180D] Division into 3 题解
数据结构·c++·算法
殷色玫瑰9 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
Evand J9 小时前
【电机滤波例程1】PMSM永磁同步电机转速与位置估计,MATLAB程序:标准无迹卡尔曼滤波、模型说明与仿真验证
算法·matlab·电机·ekf·负载·卡尔曼滤波