鱼C论坛

 找回密码
 立即注册
查看: 508|回复: 1

求最长有效括号

[复制链接]
发表于 2024-10-17 09:21:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. class Solution:
  2.     def longestValidParentheses(self, s: str) -> int:
  3.         stack=[]
  4.         maxL=0
  5.         n=len(s)
  6.         tmp=[0]*n         #标记数组
  7.         cur=0

  8.         for i in range(n):
  9.             if s[i]=='(':
  10.                 stack.append(i)
  11.             else:
  12.                 if stack:
  13.                     j=stack.pop()
  14.                     tmp[i],tmp[j]=1,1      #匹配成功时标记   
  15.             
  16.         for num in tmp:    #计算连续1出现的最大次数
  17.             if num:
  18.                 cur+=1
  19.             else:          #遇到0时中断,进行对比,并重置
  20.                 maxL=max(cur,maxL)  
  21.                 cur=0
  22.         maxL=max(cur,maxL) #最后一次统计可能未终断,多做一次对比
  23.         
  24.         return maxL

复制代码

代码如上,为什么要多做一次对比
  1. maxL=max(cur,maxL)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 16:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表