You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

LeetCode最后一个单词长度问题:为何split()解法比循环计数更快?

关于LeetCode「最后一个单词的长度」的解法性能疑问

LeetCode上的「最后一个单词的长度」问题中,有开发者发现使用split()方法的Python解法,比手动循环计数最后一个单词长度的两种解法运行速度更快,这是为什么?

使用split()的解法

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        for word in s.split(' ')[::-1]:
            if word != '':
                return len(word)

两种循环计数解法

解法一

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        firstLetter = len(s) -1
        for i in range(firstLetter, -1, -1):
            if s[i] != ' ':
                firstLetter = i
                break
        for i in range(firstLetter, -1, -1):
            if s[i] == ' ':
                return firstLetter - i
        return firstLetter+1

解法二

class Solution:
    def lengthOfLastWord(self, s: str) -> int:
        # 去除末尾空格
        p = len(s) - 1
        while p >= 0 and s[p] == ' ':
            p -= 1

        # 计算最后一个单词的长度
        length = 0
        while p >= 0 and s[p] != ' ':
            p -= 1
            length += 1
        return length

性能差异的核心原因

看起来反直觉,但本质是Python内置方法的底层实现是C语言编写的,和我们用Python代码写的循环不在同一执行层级:

  • 哪怕s.split(' ')会遍历整个字符串分割成列表,这个过程是在C的原生代码中执行的,单步操作的速度远快于Python解释器逐条处理循环语句。
  • 手动写的循环解法,每一次字符判断、变量赋值都要经过Python解释器的字节码解析步骤,哪怕逻辑上只遍历了字符串末尾的一小部分,整体的执行开销也远高于C实现的内置方法。
  • 另外,split方法内部针对字符串分割做了大量优化,比如处理连续空格时是批量处理的,比我们手动逐个字符判断的效率高得多。

内容的提问来源于stack exchange,提问作者Vinggui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 13:10:49