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

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. 字符串中的单词数 - 简单

相关文章:

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

LeetCode 第58题&#xff1a;最后一个单词的长度 题目描述 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后用一些空格字符隔开。返回字符串中最后一个单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 难度 简单 题目链接 点…...

Python 绘制迷宫游戏,自带最优解路线

1、需要安装pygame 2、上下左右移动&#xff0c;空格实现物体所在位置到终点的路线&#xff0c;会有虚线绘制。 import pygame import random import math# 迷宫单元格类 class Cell:def __init__(self, x, y):self.x xself.y yself.walls {top: True, right: True, botto…...

恶意 SSP 注入收集密码

SSP 安全服务提供者&#xff0c;是微软提供的与安全有关的函数接口&#xff0c;用户可根据自己的需求调用 SSP 接口实现高度自定义的身份验证等安全功能。攻击者注入恶意的 SSP 接口覆盖微软默认的某些安全功能&#xff0c;导致用户一旦进行身份验证&#xff0c;恶意的 SSP 将保…...

Llama 2中的Margin Loss:为何更高的Margin导致更大的Loss和梯度?

Llama 2中的Margin Loss&#xff1a;为何更高的Margin导致更大的Loss和梯度&#xff1f; 在《Llama 2: Open Foundation and Fine-Tuned Chat Models》论文中&#xff0c;作者在强化学习与人类反馈&#xff08;RLHF&#xff09;的Reward Model训练中引入了Margin Loss的概念&a…...

Python----数据分析(Numpy:安装,数组创建,切片和索引,数组的属性,数据类型,数组形状,数组的运算,基本函数)

一、 Numpy库简介 1.1、概念 NumPy(Numerical Python)是一个开源的Python科学计算库&#xff0c;旨在为Python提供 高性能的多维数组对象和一系列工具。NumPy数组是Python数据分析的基础&#xff0c;许多 其他的数据处理库&#xff08;如Pandas、SciPy&#xff09;都依赖于Num…...

Android Logcat 高效调试指南

工具概览 Logcat 是 Android SDK 提供的命令行日志工具&#xff0c;支持灵活过滤、格式定制和实时监控&#xff0c;官方文档详见 Android Developer。 基础用法 命令格式 [adb] logcat [<option>] ... [<filter-spec>] ... 执行方式 直接调用&#xff08;通过ADB守…...

Pytest之fixture的常见用法

文章目录 1.前言2.使用fixture执行前置操作3.使用conftest共享fixture4.使用yield执行后置操作 1.前言 在pytest中&#xff0c;fixture是一个非常强大和灵活的功能&#xff0c;用于为测试函数提供固定的测试数据、测试环境或执行一些前置和后置操作等&#xff0c; 与setup和te…...

如何把网络ip改为动态:全面指南

在数字化时代&#xff0c;网络IP地址作为设备在网络中的唯一标识&#xff0c;扮演着至关重要的角色。随着网络环境的不断变化&#xff0c;静态IP地址的局限性逐渐显现&#xff0c;而动态IP地址则因其灵活性和安全性受到越来越多用户的青睐。那么&#xff0c;如何把网络IP改为动…...

anythingLLM和deepseek4j和milvus组合建立RAG知识库

1、deepseek本地化部署使用 ollama 下载模型 Tags bge-m3 bge-m3:latest deepseek-r1:32b deepseek-r1:8b 2、安装好向量数据库 milvus docker安装milvus单机版-CSDN博客 3、安装 anythingLLM AnythingLLM | The all-in-one AI application for everyone …...

和鲸科技推出人工智能通识课程解决方案,助力AI人才培养

2025年2月&#xff0c;教育部副部长吴岩应港澳特区政府邀请&#xff0c;率团赴港澳宣讲《教育强国建设规划纲要 (2024—2035 年)》。在港澳期间&#xff0c;吴岩阐释了教育强国目标的任务&#xff0c;并与特区政府官员交流推进人工智能人才培养的办法。这一系列行动体现出人工智…...

当我删除word文件时无法删除,提示:操作无法完成,因为已在Microsoft Word中打开

现象&#xff1a; 查看电脑桌面下方的任务栏&#xff0c;明明已经关闭了WPS和WORD软件&#xff0c;但是打开word文档时还是提示&#xff1a; 解决方法步骤&#xff1a; 1、按一下键盘上的ctrl Shift Esc 键打开任务管理器 2、在进程中找到如下&#xff1a; 快速找到的方法…...

高频面试题(含笔试高频算法整理)基本总结回顾3

目录 一、基本面试流程回顾 二、基本高频算法题展示 三、基本面试题总结回顾 &#xff08;一&#xff09;Java高频面试题整理 &#xff08;二&#xff09;JVM相关面试问题整理 &#xff08;三&#xff09;MySQL相关面试问题整理 &#xff08;四&#xff09;Redis相关面试…...

Python中字符串的常用操作

一、r原样输出 在 Python 中&#xff0c;字符串前加 r&#xff08;即 r"string" 或 rstring&#xff09;表示创建一个原始字符串&#xff08;raw string&#xff09;。下面详细介绍原始字符串的特点、使用场景及与普通字符串的对比。 特点 忽略转义字符&#xff1…...

卷积神经网络(cnn,类似lenet-1,八)

我们第一层用卷积核&#xff0c;前面已经成功&#xff0c;现在我们用两层卷积核&#xff1a; 结构如下&#xff0c;是不是很想lenet-1&#xff0c;其实我们24年就实现了sigmoid版本的&#xff1a; cnn突破九&#xff08;我们的五层卷积核bpnet网络就是lenet-1&#xff09;-CS…...

Win32 C++ 电源计划操作

CPowerCfgUtils.h #pragma once#include <Windows.h> #include <powrprof.h>// https://learn.microsoft.com/zh-cn/windows/win32/api/powrprof/?sourcerecommendations//节能 //DEFINE_GUID(GUID_MAX_POWER_SAVINGS, 0xA1841308, 0x3541, 0x4FAB, 0xBC, 0x81, …...

PH热榜 | 2025-03-01

1. Helix 标语&#xff1a;从想法到原型只需3分钟 介绍&#xff1a;Helix可以在几分钟内将你的创业想法变成一个准备好接受投资的原型。你可以创建功能齐全、可点击的用户界面和用户体验设计&#xff0c;完全不需要任何设计技能。 产品网站&#xff1a; 立即访问 Product H…...

如何管理路由器

一、管理路由器的必要性 1、需要修改拨号上网的密码。 2、需要修改WIFI的SSID名字和密码。 3、设置DHCP协议信息。 4、设置IP地址的过滤规则。 5、给某个设备连接设置网络限速。 二、常见的方式 (一)web网页方式 1、计算机用双绞线或者WIFI的方式连接路由器。 2、在计算机中打开…...

deepseek使用记录17

基于《资本论》方法论的"35岁危机"系统分析 一、劳动力商品化与价值贬值的双重绞索 马克思揭示&#xff1a;“劳动力作为商品&#xff0c;其价值由生产劳动力所需的社会必要劳动时间决定”。在数字资本主义时代&#xff0c;这一规律呈现特殊形态&#xff1a; 技能折…...

【Java】I/O 流篇 —— 打印流与压缩流

目录 打印流概述字节打印流构造方法成员方法代码示例 字符打印流构造方法成员方法代码示例 打印流的应用场景 解压缩/压缩流解压缩流压缩流 Commons-io 工具包概述Commons-io 使用步骤Commons-io 常见方法代码示例 Hutool 工具包 打印流 概述 分类&#xff1a;打印流一般是指…...

Tomcat基础知识及其配置

1.Tomcat简介 Tomcat是Apache软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中的一个核心项目&#xff0c;由Apache、Sun和其他一些公司及个人共同开发而成。 Tomcat服务器是一个免费的开放源代码的Web应用服务器&#xff0c;属于轻量级应用服…...

【LeetCode】739.每日温度

目录 题目描述输入输出示例及数据范围思路&#xff1a;单调栈C 实现 题目描述 给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这…...

测试金蝶云的OpenAPI

如何使用Postman测试K3Cloud的OpenAPI 1. 引言 在本篇博客中&#xff0c;我将带你逐步了解如何使用Postman测试和使用K3Cloud的OpenAPI。内容包括下载所需的SDK文件、配置文件、API调用及测试等步骤。让我们开始吧&#xff01; 2. 下载所需的SDK文件 2.1 获取SDK 首先&…...

SID History 域维权

SID History 域林攻击&#xff1a;域林攻击详解-CSDN博客 SID History 根据微软的描述&#xff0c;SID History 属性是微软对域内用户进行域迁移的支持而创建的。每当对象从一个域移动到另一个域时&#xff0c;都会创建一个新的 SID&#xff0c;并且该新 SID 将成为 objectSI…...

unittest自动化测试框架详解

一、Unittest简介 Unittest是python内置的一个单元测试框架&#xff0c;主要用于自动化测试用例的开发与执行 简单的使用如下 import unittestclass TestStringMethods(unittest.TestCase):def setUp(self):print("test start")def test_upper(self):self.assertE…...

ORM Bee V2.5.2.x 发布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片

Bee, 一个具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鸿蒙) 小巧玲珑&#xff01;仅 940K, 还不到 1M, 但却是功能强大&#xff01; V2.5.2 (2025・LTS 版) 开发中... **2.5.2.1 新年 ** 支持 Mong…...

关于C/C++的输入和输出

目录 一、C语言中的scanf 有关scanf()的例子 二、C语言中的printf 有关printf()的例子 三、C中的cin、cout 四、字符的输入 1、cin.get() 2、cin.get() 3、cin.getline() 4、getline() 5、getchar() 五、string类型字符串长度 1、length() 2、size() 一、C语言中…...

1-kafka单机环境搭建

本文介绍kafka单机环境的搭建及可视化环境配置&#xff0c;虽然没有java代码&#xff0c;但是麻雀虽小五脏俱全&#xff0c;让大家在整体感官上对kafka有个认识。在文章的最后&#xff0c;我介绍了几个重要的配置参数&#xff0c;供大家参考。 0、环境 kafka&#xff1a;2.8.…...

Qt常用控件之旋钮QDial

旋钮QDial QDial 表示一个旋钮控件。 1. QDial属性 属性说明value当前数值。minimum最小值。maximum最大值。singleStep按下方向键时改变的步长。pageStep按下 pageUp/pageDown 的时候改变的步长。sliderPosition界面上旋钮显示的初始位置。tracking外观是否会跟踪数值变化&…...

基于DeepSeek,构建个人本地RAG知识库

经过一段使用DeepSeek后&#xff0c;感觉使用体验和ChatGPT基本差不多&#xff0c;回答问题的质量略有提升&#xff0c;因DeepSeek已开源&#xff0c;它的模型、模型参数权重从网上都可以下载到&#xff0c;所以可以基于开源的模型&#xff0c;在本地构建一个自己的知识库&…...

散户如何实现自动化交易下单——篇1:体系介绍与获取同花顺资金账户和持仓信息

一、为什么要实现自动化交易 在瞬息万变的金融市场中&#xff0c;越来越多的散户投资者开始尝试构建自己的交易策略&#xff1a;有人通过技术指标捕捉趋势突破&#xff0c;有人利用基本面分析挖掘低估标的&#xff0c;还有人设计出复杂的网格交易或均值回归模型。然而&a…...