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

代码训练LeetCode(29)最后一个单词的长度

代码训练(29)LeetCode之最后一个单词的长度

Author: Once Day Date: 2025年6月11日

漫漫长路,才刚刚开始…

全系列文章可参考专栏: 十年代码训练_Once-Day的博客-CSDN博客

参考文章:

  • 58. 最后一个单词的长度 - 力扣(LeetCode)
  • 力扣 (LeetCode) 全球极客挚爱的技术成长平台

文章目录

      • 代码训练(29)LeetCode之最后一个单词的长度
        • 1. 原题
        • 2. 分析
        • 3. 代码实现
        • 4. 总结

1. 原题

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

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

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • 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”。
2. 分析

题目要求从一个由若干单词组成的字符串中找出最后一个单词的长度。这里的单词是指连续的字母字符序列,单词之间由一个或多个空格分隔。重点在于处理字符串前后以及单词间可能存在的多余空格。

解题思路:

  1. 去除尾部空格:从字符串末尾开始,去除所有空格,确保字符串以最后一个单词结束。
  2. 计算最后一个单词的长度:继续从末尾向前遍历,直到遇到空格或字符串的开头,这样可以得到最后一个单词的长度。

分析步骤:

  • 首先,从字符串末尾开始遍历,忽略掉所有的空白字符。

  • 然后,从第一个非空白字符开始,计数直到再次遇到空白字符或字符串的起始位置。

  • 计数的结果即为最后一个单词的长度。

例如,对于输入 " fly me to the moon "

  • 移除尾部空格后变为 " fly me to the moon"
  • 最后一个单词是 "moon",从后往前数,长度为4。

性能优化关键点:

  • 尽可能减少遍历次数:只需从后向前遍历一次字符串。
  • 避免使用额外的空间:直接在原字符串上操作,不使用额外的存储结构。
3. 代码实现
#include <stdio.h>
#include <string.h>int lengthOfLastWord(const char *s) {int len = strlen(s);int lastWordLength = 0;int i = len - 1;// Skip trailing spaceswhile (i >= 0 && s[i] == ' ') {i--;}// Count the length of the last wordwhile (i >= 0 && s[i] != ' ') {lastWordLength++;i--;}return lastWordLength;
}int main() {char input[] = "   fly me   to   the moon  ";int result = lengthOfLastWord(input);printf("Length of the last word: %d\n", result);return 0;
}
4. 总结

这个问题考察了对字符串操作的基础能力,特别是如何有效地处理和遍历字符串。通过这种类型的问题,可以加深对字符串处理函数如 strlen 的理解,并提升处理边界情况的能力。要进一步提升编程能力,练习更多关于字符串处理的题目是非常有帮助的,同时也可以学习更多关于内存和性能优化的技巧。

http://www.xdnf.cn/news/13441.html

相关文章:

  • Github月度新锐热门工具 - 202506
  • PyTorch:让深度学习像搭积木一样简单!!!
  • 邮件限流器
  • 《Redis》持久化
  • 国产linux系统(银河麒麟,统信uos)使用 PageOffice实现word 文档中的table插入新行并赋值
  • 论文略读:RegMix: Data Mixture as Regression for Language Model Pre-training
  • CATIA高效工作指南——常规配置篇(四)
  • deepbayes: VI回顾和GMM近似推断
  • 分布式事务的炼狱:Spring Cloud 微服务架构下的数据一致性保障战
  • 时序数据库Influxdb3 core安装
  • 中兴B860AV1.1_晨星MSO9280芯片_4G和8G闪存_TTL-BIN包刷机固件包
  • Android 实现可拖动的ImageView
  • RTX4060安装cuda12.3 cudnn8.9
  • Neo4j批量数据导入完全指南:高效处理大规模数据
  • MyBatis-Plus 混合使用 XML 和注解
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | FAQ Collapse(问题解答折叠面板)
  • Oracle ADG 日常巡检指南
  • 由编译osgEarth源码引发的一系列问题(三)利用vcpkg安装osg与OSGEarth
  • JavaScript跨域全面指南:从原理到最佳实践
  • RV1126+OPENCV在视频中添加LOGO图像
  • JVM面试基础篇
  • `dispatch_source_t` 计时器 vs `NSTimer`:核心差异一览
  • 【实习总结】C++ 通过pugi::xml库对xml文件进行操作
  • 如何正确的配置eureka server集群
  • 【QT】窗口详解
  • Linux进程管理:创建,终止,等待
  • 智能机器人从零构建陪跑计划
  • PyTorch:让深度学习像搭积木一样简单有趣!
  • Vue实现图像对比组件:打造交互式图片比较工具
  • 深度学习:PyTorch简介