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

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

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

漫漫长路,才刚刚开始...

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

参考文章:

文章目录

1. 原题

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

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

提示:

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

示例 1:

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

示例 2:

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

示例 3:

c 复制代码
输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为 6 的"joyboy"。
2. 分析

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

解题思路:

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

分析步骤:

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

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

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

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

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

性能优化关键点:

  • 尽可能减少遍历次数:只需从后向前遍历一次字符串。
  • 避免使用额外的空间:直接在原字符串上操作,不使用额外的存储结构。
3. 代码实现
c 复制代码
#include <stdio.h>
#include <string.h>

int lengthOfLastWord(const char *s) {
    int len = strlen(s);
    int lastWordLength = 0;
    int i = len - 1;

    // Skip trailing spaces
    while (i >= 0 && s[i] == ' ') {
        i--;
    }

    // Count the length of the last word
    while (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 的理解,并提升处理边界情况的能力。要进一步提升编程能力,练习更多关于字符串处理的题目是非常有帮助的,同时也可以学习更多关于内存和性能优化的技巧。

相关推荐
艾醒1 小时前
大模型面试题剖析:模型微调中冷启动与热启动的概念、阶段与实例解析
深度学习·算法
新学笺2 小时前
数据结构与算法 —— 从基础到进阶:带哨兵的单向链表,彻底解决边界处理痛点
算法
智者知已应修善业2 小时前
【51单片机计时器1中断的60秒数码管倒计时】2023-1-23
c语言·经验分享·笔记·嵌入式硬件·算法·51单片机
Jiezcode2 小时前
LeetCode 148.排序链表
数据结构·c++·算法·leetcode·链表
Asmalin2 小时前
【代码随想录day 29】 力扣 406.根据身高重建队列
算法·leetcode·职场和发展
Asmalin2 小时前
【代码随想录day 32】 力扣 70.爬楼梯
算法·leetcode·职场和发展
张书名3 小时前
《强化学习数学原理》学习笔记3——贝尔曼方程核心概念梳理
笔记·学习·算法
闻缺陷则喜何志丹4 小时前
【中位数贪心】P6696 [BalticOI 2020] 图 (Day2)|普及+
c++·算法·贪心·洛谷·中位数贪心
嵌入式-老费4 小时前
Easyx使用(中篇)
算法
信奥卷王4 小时前
[GESP202312 五级] 烹饪问题
算法