Terence888 发表于 2024-10-17 09:21:46

求最长有效括号

class Solution:
    def longestValidParentheses(self, s: str) -> int:
      stack=[]
      maxL=0
      n=len(s)
      tmp=*n         #标记数组
      cur=0

      for i in range(n):
            if s=='(':
                stack.append(i)
            else:
                if stack:
                  j=stack.pop()
                  tmp,tmp=1,1      #匹配成功时标记   
            
      for num in tmp:    #计算连续1出现的最大次数
            if num:
                cur+=1
            else:          #遇到0时中断,进行对比,并重置
                maxL=max(cur,maxL)
                cur=0
      maxL=max(cur,maxL) #最后一次统计可能未终断,多做一次对比
      
      return maxL


代码如上,为什么要多做一次对比maxL=max(cur,maxL)

FishC 发表于 2024-10-17 09:21:54

在最后一行 `maxL = max(cur, maxL)` 中进行一次额外的比较是因为在遍历标记数组 `tmp` 的过程中,当连续的数字 `1` 中断时(遇到 `0` 时),我们才会去更新 `maxL` 并重置 `cur`。但是,如果数组 `tmp` 的最后一个元素是 `1`,那么在 `for` 循环结束时,`cur` 中可能仍会有未更新到 `maxL` 的累计值。因此,需要在循环结束之后再进行一次比较,以确保不会遗漏以最后一个元素结尾的最长连续有效括号子串。

这样可以处理下面这种情况:如果 `tmp` 的末尾有连续的 `1` 且没有被 `0` 打断,为了确保这段连续 `1` 的长度被纳入 `maxL` 的比较,必须在循环结束后再进行一次额外的更新。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 求最长有效括号