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

相关推荐
小O的算法实验室20 小时前
2026年ASOC,基于深度强化学习的无人机三维复杂环境分层自适应导航规划方法,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
郭涤生21 小时前
STL vector 扩容机制与自定义内存分配器设计分析
c++·算法
༾冬瓜大侠༿21 小时前
vector
c语言·开发语言·数据结构·c++·算法
Ricky111zzz1 天前
leetcode学python记录1
python·算法·leetcode·职场和发展
汀、人工智能1 天前
[特殊字符] 第58课:两个正序数组的中位数
数据结构·算法·数据库架构··数据流·两个正序数组的中位数
liu****1 天前
第16届省赛蓝桥杯大赛C/C++大学B组(京津冀)
开发语言·数据结构·c++·算法·蓝桥杯
汀、人工智能1 天前
[特殊字符] 第79课:分割等和子集
数据结构·算法·数据库架构·位运算·哈希表·分割等和子集
汀、人工智能1 天前
[特殊字符] 第74课:完全平方数
数据结构·算法·数据库架构·图论·bfs·完全平方数
CoderCodingNo1 天前
【GESP】C++四、五级练习题 luogu-P1177 【模板】排序
数据结构·c++·算法
Proxy_ZZ01 天前
从零实现LDPC比特翻转译码器:C语言实战与底层逻辑解析
c语言·算法