class Solution:
def longestValidParentheses(self, s: str) -> int:
stack=[]
#标记有效括号的位置
valid_lengths=[0]*len(s)
#遍历字符串
for i,char in enumerate(s):
if char=='(':
stack.append(i)
elif stack:
#匹配到右括号,标记有效区间
left_index=stack.pop()
valid_lengths[left_index]=valid_lengths[i]=1
max_len=0
cur_len=0
#计算最长有效括号子串的长度
for length in valid_lengths:
if length:
cur_len+=1
else:
max_len=max(max_len,cur_len)
cur_len=0
#更新最后一段有效括号的长度
max_len=max(max_len,cur_len)
return max_len
stack
用于存储左括号的索引。valid_lengths
用于记录有效括号的位置。- 遍历字符串,遇到左括号时存储索引,遇到右括号时检查栈中是否有对应的左括号索引,更新
valid_lengths
。 - 遍历
valid_lengths
,计算最长有效括号子串的长度,返回结果。