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

相关推荐
零叹5 分钟前
篇章十 数据结构——排序
java·数据结构·算法·排序算法
涛哥码咖11 分钟前
前端十种排序算法解析
前端·算法·排序算法
朝朝又沐沐1 小时前
算法竞赛阶段二-数据结构(32)数据结构简单介绍
数据结构·算法
共享家95271 小时前
c语言(重点)
c语言·数据结构·算法
玉米的玉*」*2 小时前
【每日likou】704. 二分查找 27. 移除元素 977.有序数组的平方
数据结构·算法·leetcode
星火飞码iFlyCode2 小时前
【无标题】
java·前端·人工智能·算法
liulilittle2 小时前
OpenSSL 的 AES-NI 支持机制
linux·运维·服务器·算法·加密·openssl·解密
yzx9910132 小时前
柑橘检测模型
服务器·人工智能·深度学习·算法
南枝异客2 小时前
电话号码的字母组合
开发语言·javascript·算法
快乐肚皮3 小时前
快速排序:分治思想的经典实践
java·算法·排序算法