力扣(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) 额外空间。它从末尾扫描,跳过尾随空格,并计算最后一个单词的字符数。这避免了创建所有单词的列表,使其对长字符串更高效。

相关推荐
纽扣6673 分钟前
【算法进阶之路】链表核心:快慢指针与反转链表专题精讲
数据结构·c++·算法·链表
vortex514 分钟前
Villain:新一代轻量级 C2 框架完整使用指南
python·网络安全·kali·c2
浅念-14 分钟前
吃透栈:LeetCode 栈算法题全解析
数据结构·c++·算法·leetcode·职场和发展·
吟安安安安15 分钟前
【算法设计与分析】第一讲 算法基础(上)
算法
阿Y加油吧15 分钟前
二刷 LeetCode:62. 不同路径 & 64. 最小路径和 复盘笔记
笔记·算法·leetcode
测试员周周16 分钟前
【AI测试系统】第5篇:AI 编码工具抛硬币?我们用 LangGraph 做了个“确定性+AI”的测试系统(附自愈架构)
人工智能·python·功能测试·测试工具·架构·langchain·单元测试
Levin__NLP_CV_AIGC18 分钟前
py文件中文件复制方法
开发语言·python
生成论实验室20 分钟前
《源·觉·知·行·事·物:生成论视域下的统一认知语法》导论:在破碎的世界寻找统一语法
人工智能·科技·算法·架构·创业创新
承渊政道21 分钟前
【动态规划算法】(两个数组的DP问题深度剖析与求解方法)
数据结构·c++·学习·算法·leetcode·动态规划·哈希算法
庚昀◟23 分钟前
腾讯云 CVM + Docker + Jenkins + GitLab CI/CD 全流程指南(python、flask实现简单计算器)
python·ci/cd·docker·flask·jenkins