def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
n = len(s)
l,r = 0, 0
res = 0
#从左往右找最后一个符合的右括号统计长度,注意当右括号数量超过左括号时说明(前面所有的到这个右括号)都没用了
#就是和前面的不连续,可以重新计数了
#由于是从左往右,如果左括号大于右括号但是某段中间的符合条件也有可能不被统计
for i in range(n):
if s[i] == "(":
l += 1
else:
r += 1
if r > l:
l,r = 0, 0
if l == r:
res = max(res,l+r)
#所以在下面需要从右往左统计一遍,更改重置条件为左括号数量大于右括号
#这样会更新最大的长度为两次遍历中较长的一个
l,r = 0, 0
for i in range(n-1,-1,-1):
if s[i] == "(":
l += 1
else:
r += 1
if l > r:
l,r = 0, 0
if l == r:
res = max(res,l+r)
return res
leetcode32. 最长有效括号
最新推荐文章于 2025-06-08 08:35:47 发布