当前位置: 首页 > news >正文

LeetCode第58题_最后一个单词的长度

LeetCode 第58题:最后一个单词的长度

题目描述

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

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

难度

简单

题目链接

点击在LeetCode中查看题目

示例

示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是"World",长度为5。

示例 2:

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

示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是"joyboy",长度为6。

提示

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

解题思路

方法一:从后向前遍历

这道题的关键是要处理好字符串末尾的空格和单词的边界。从后向前遍历是一个很好的选择。

关键点:

  1. 从字符串末尾开始遍历,跳过末尾的空格
  2. 统计连续的非空格字符数量
  3. 遇到空格或到达字符串开头时停止

具体步骤:

  1. 初始化单词长度为0
  2. 从字符串末尾开始向前遍历,跳过末尾的空格
  3. 继续向前遍历,统计连续的非空格字符,直到遇到空格或到达字符串开头
  4. 返回统计的字符数量

时间复杂度:O(n),其中n是字符串的长度
空间复杂度:O(1),只需要常数级别的额外空间

方法二:分割字符串

另一种思路是使用字符串分割函数,但这种方法的空间复杂度较高。

具体步骤:

  1. 使用字符串分割函数将字符串按空格分割成数组
  2. 过滤掉空字符串
  3. 返回最后一个单词的长度

时间复杂度:O(n)
空间复杂度:O(n),需要存储分割后的字符串数组

代码实现

C# 实现(从后向前遍历)

public class Solution {
    public int LengthOfLastWord(string s) {
        int length = 0;
        int i = s.Length - 1;
        
        // 跳过末尾的空格
        while (i >= 0 && s[i] == ' ') {
            i--;
        }
        
        // 统计最后一个单词的长度
        while (i >= 0 && s[i] != ' ') {
            length++;
            i--;
        }
        
        return length;
    }
}

C# 实现(分割字符串)

public class Solution {
    public int LengthOfLastWord(string s) {
        string[] words = s.Split(' ', StringSplitOptions.RemoveEmptyEntries);
        return words[words.Length - 1].Length;
    }
}

执行结果

方法一(从后向前遍历):

  • 执行用时:52 ms
  • 内存消耗:36.7 MB

方法二(分割字符串):

  • 执行用时:64 ms
  • 内存消耗:37.1 MB

代码亮点

  1. 🎯 从后向前遍历的方法避免了额外的空间开销
  2. 💡 跳过末尾空格的处理很巧妙
  3. 🔍 边界条件处理完善
  4. 🎨 代码结构清晰,易于理解

常见错误分析

  1. 🚫 没有处理字符串末尾的空格
  2. 🚫 没有处理字符串全是空格的情况
  3. 🚫 使用Split方法时没有正确处理空字符串
  4. 🚫 遍历时的边界条件判断错误

解法对比

解法时间复杂度空间复杂度优点缺点
从后向前遍历O(n)O(1)空间效率高,实现简单需要仔细处理边界条件
分割字符串O(n)O(n)代码简洁,易于理解空间开销较大

相关题目

  • LeetCode 151. 反转字符串中的单词 - 中等
  • LeetCode 557. 反转字符串中的单词 III - 简单
  • LeetCode 434. 字符串中的单词数 - 简单

相关文章:

  • 进行性核上性麻痹患者的生活护理指南
  • tableau之标靶图、甘特图和瀑布图
  • CI/CD与容器化技术核心知识点的QA
  • SQL 语言基础:日期和时间处理
  • ES怎么查询大于10000条数据
  • 在一台win10专业版设备上使用docker的怪现象
  • 本地部署DeepSeek-R1(Dify发件邮箱、找回密码、空间名称修改)
  • mysql中的的锁
  • 05 英雄C++ STL 编程(下)
  • 【补充】RustDesk一键部署及账号登录配置
  • 算法-二叉树篇20-二叉搜索树中的众数
  • 探索分布式事务与Seata:构建可靠的Spring微服务架构
  • MySQL零基础教程11—拼接/计算
  • 监控视频流web端播放
  • Vue.js 组件开发全面详解及应用案例
  • 【量化金融自学笔记】--开篇.基本术语及学习路径建议
  • Hive配置
  • 计算机毕业设计SpringBoot+Vue.js人口老龄化社区服务与管理平台 (源码+文档+PPT+讲解)
  • PHP实现登录和注册(附源码)
  • 如何通过rust实现自己的web登录图片验证码
  • 网站关键词太多/中国今日新闻
  • 毕设做网站可以用模板吗/网站推广方案模板
  • 顺德微信网站建设/清远市发布
  • 做面膜的网站/群排名优化软件
  • 低代码开发平台 免费/seo的基本工作内容
  • 广州市做民宿什么网站比较好/杭州seo博客有哪些