力扣(LeetCode) 58: 最后一个单词的长度 - 解法思路

问题概述

给定一个字符串,该字符串由单词和空格组成,返回字符串中最后一个单词的长度。单词是仅由非空格字符组成的最大子字符串。

解法 1:分割并获取最后一个

工作原理

按空格分割字符串,获取最后一个单词的长度:

python 复制代码
class Solution:
    def lengthOfLastWord(self, s):
        words = s.split()
        return len(words[-1]) if words else 0

复杂度分析

  • 时间复杂度: O(n) - 分割操作需要扫描整个字符串
  • 空间复杂度: O(n) - 创建所有单词的列表

何时使用

  • 简单易读
  • 适用于短字符串
  • 对于非常长的字符串,由于空间开销,不是最优解

解法 2:反向扫描(最优)

工作原理

从字符串末尾扫描,跳过尾随空格,然后计算最后一个单词的字符数:

python 复制代码
class Solution:
    def lengthOfLastWord(self, s):
        length = 0
        i = len(s) - 1
        
        while i >= 0 and s[i] == ' ':
            i -= 1
        
        while i >= 0 and s[i] != ' ':
            length += 1
            i -= 1
        
        return length

复杂度分析

  • 时间复杂度: O(n) - 最坏情况需要扫描整个字符串
  • 空间复杂度: O(1) - 只使用常数额外空间

何时使用

  • 推荐 - 最优空间复杂度
  • 对于长字符串更快(无需创建列表)
  • 当最后一个单词靠近末尾时更高效

对比

方法 时间 空间 最佳适用
分割 O(n) O(n) 短字符串,简单代码
反向扫描 O(n) O(1) 长字符串,最优空间

总结

反向扫描方法在空间复杂度上是最优的,使用 O(1) 额外空间。它从末尾扫描,跳过尾随空格,并计算最后一个单词的字符数。这避免了创建所有单词的列表,使其对长字符串更高效。

相关推荐
Sakura_j_h_2 分钟前
给 FastAPI 接大模型:超时、重试和 token 成本该怎么管
python·大模型·fastapi·超时重试·token计费
forest_097 分钟前
用Python复刻ClaudeDuet:主动式Agent四件套,定时晨报、后台巡检、危险动作审批(附完整可运行代码)
人工智能·python·架构·prompt·agi
小小张说故事31 分钟前
Python 的函数调用到底贵在哪?拆开一次 call:51 纳秒栈帧与 *args 的 40 纳秒罚单
python
Navigator_Z1 小时前
LeetCode //C - 1300. Sum of Mutated Array Closest to Target
c语言·算法·leetcode
SZYSK1 小时前
鸿蒙人脸识别算法放在终端里:和外挂授权 SDK 差在排障路径
物联网·算法·华为·harmonyos
程序猿乐锅1 小时前
【从0-1学习Python | 第七篇】Python 面向对象基础
开发语言·笔记·后端·python·学习·1024程序员节
lzqrzpt1 小时前
太阳能控制器选型要点:电路工艺与工程适配技术解析
python·1024程序员节
凯瑟琳.奥古斯特2 小时前
力扣1016高效解法:剪枝优化技巧
开发语言·c++·算法·leetcode·职场和发展
xiangyun612 小时前
C++ priority_queue 底层:手撕二叉堆与 Top K 问题
c++·算法·面试·stl·1024程序员节
databook2 小时前
时间序列数据中,如何找出缺失值
python·数据分析