没有重复字符的最长子字符串 - 代码在 运行 期间有效,但在提交同一测试用例时失败

Longest Substring without repeating characters - Code works during run , but fails on submit for the same testcase

   class Solution:
        def lengthOfLongestSubstring(self, s: str,unique=[]) -> int:
            i=0
            m=0
            j=0
            l=0
            while(i<len(s)):

                if(s[i] not in unique):
                    unique.append(s[i])
                    m=m+1
                    l = max(l,m)
                    i=i+1

                else:
                    unique=[]
                    j=j+1
                    i=j
                    m=0

            print(l)
            return

输入="c" 在运行代码期间输出 =“1”,但在提交时失败(0)。它也适用于同一测试用例的游乐场调试。想不通。

这是由于 Python 处理函数定义中可变默认参数的方式而出现的问题,在本例中为 unique=[]。建议的解决方法是:

def lengthOfLongestSubstring(self, s: str,unique=None) -> int:
    if unique is None:
        unique = []

这是相当 st运行ge 行为,但由于在 Python 中一切都是对象,这似乎意味着此类参数导致函数在每次调用后记住其状态 (在其他语言中表现得更像是一个内部带有静态变量的函数)。我 运行 更改语句的代码似乎解决了问题。以下是对该问题的更完整讨论:

https://docs.python-guide.org/writing/gotchas/