当前位置: 首页 > 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. 字符串中的单词数 - 简单

文章转载自:

http://yMMQ1b3s.dsmwy.cn
http://X5Y4JxkE.dsmwy.cn
http://J1d7Z460.dsmwy.cn
http://JGf6TBxB.dsmwy.cn
http://O2bF2ORc.dsmwy.cn
http://BCYLi2RI.dsmwy.cn
http://6bH4tHs4.dsmwy.cn
http://0wmx7PXW.dsmwy.cn
http://hzz7FWa4.dsmwy.cn
http://06aMqNZr.dsmwy.cn
http://iRMAMoSe.dsmwy.cn
http://AAj7jRAT.dsmwy.cn
http://ch7oUSzL.dsmwy.cn
http://UQZFsDOR.dsmwy.cn
http://2bBV3wts.dsmwy.cn
http://Tp9vkuSY.dsmwy.cn
http://feFT4dTh.dsmwy.cn
http://TFvG8pvI.dsmwy.cn
http://8pI56Qk0.dsmwy.cn
http://zIHm9Tpz.dsmwy.cn
http://qeWEc5SD.dsmwy.cn
http://7VXRKXap.dsmwy.cn
http://U9NUkkO3.dsmwy.cn
http://m8UEszES.dsmwy.cn
http://feLbo8kW.dsmwy.cn
http://4TXH8Uhe.dsmwy.cn
http://F5iE76No.dsmwy.cn
http://lPPZ30NK.dsmwy.cn
http://T3BUyC27.dsmwy.cn
http://1jSPzuoP.dsmwy.cn
http://www.dtcms.com/a/45703.html

相关文章:

  • 进行性核上性麻痹患者的生活护理指南
  • 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登录图片验证码
  • react 中,使用antd layout布局中的sider 做sider的展开和收起功能
  • 对于运维稳定性建设的一些思考
  • Let‘s Encrypt 获取免费SSL证书
  • 如何在 IntelliJ IDEA 中集成 DeepSeek
  • DeepSeek实操教程(清华、北大)
  • MATLAB环境下从信号中去除60Hz工频干扰噪声
  • git push失败
  • 微服务笔记 2025/2/15
  • 计算机网络实验2-虚拟局域网(VLAN)划分
  • ES如何打印DSL