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

Python编写LeetCode题时已定义longestSubstring仍报NameError求助

Python LeetCode题NameError报错修复方案

报错信息

NameError: name 'longestSubstring' is not defined
currentBest = longestSubstring(s)
Line 38 in lengthOfLongestSubstring (Solution.py)

根因分析

1 触发NameError的直接原因

  • longestSubstring是Solution类的内部成员方法,Python规则要求类内部调用成员方法必须加实例前缀self.,直接写函数名会被识别为全局函数,全局作用域找不到对应函数就会抛出NameError
  • 类成员方法定义时第一个参数必须为实例本身self,你当前longestSubstring的定义没有加self参数,即使加了调用前缀也会出现参数数量不匹配的报错,如果你不需要用到实例属性,可以给方法加@staticmethod装饰器声明为静态方法,就不需要加self参数

2 其他隐藏错误

除了NameError外,你当前代码还存在多处语法和逻辑错误:

  • 字符串没有append方法:你在else分支写的s.append(element)属于笔误,应该是向temp数组添加元素,修改为temp.append(element)
  • Python中获取字符串长度用内置函数len(s),没有s.length属性,对应代码修改为tot = len(s)
  • longestSubstring内部遇到重复字符直接break会终止遍历,无法处理重复字符之后的内容,逻辑不符合无重复子串的计算要求
  • 外层循环中每次调用longestSubstring(s[1:])永远是截取字符串从索引1开始的子串,不会随循环变量x变化,无法遍历所有起始位置的子串,应修改为longestSubstring(s[x:])

修复参考

基础修复(仅解决NameError及语法错误)

class Solution:
    # 加静态方法装饰器,不需要self参数
    @staticmethod
    def longestSubstring(s: str) -> int:
        count = 0
        longest = 0
        temp = []        
        for element in s:
            if element in temp:
                if count > longest:
                    longest = count
                count = 0
                temp.clear()
                # 此处break后续仍需调整逻辑,仅先修复语法问题
                break
            else:
                # 修正append对象
                temp.append(element)
                count += 1
        # 补充遍历结束后没有遇到重复字符的场景,需要把当前count和longest比较
        return max(longest, count)
    
    def lengthOfLongestSubstring(self, s: str) -> int:
        # 调用类内部静态方法加self前缀
        currentBest = self.longestSubstring(s)
        # 修正获取长度的方法
        tot = len(s)
        for x in range(tot):
            # 修正截取子串的逻辑
            output = self.longestSubstring(s[x:])
            if output > currentBest:
                currentBest = output
        return currentBest

逻辑优化提示

当前暴力枚举的思路可以跑通,但时间复杂度为O(n²),如果要优化到O(n)可以考虑滑动窗口方案,用哈希表记录字符最后出现的位置,避免重复遍历。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:45:04