给你一个只包含 ‘(‘ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = “(()” 输出:2
解释:最长有效括号子串是 “()”
示例 2:
输入:s = “)()())” 输出:4
解释:最长有效括号子串是 “()()”
示例 3:
输入:s = “” 输出:0
思路一:栈
class Solution:def longestValidParentheses(self, s: str) -> int:ans=0stk=[-1] # 为了满足第一个未匹配的右括号放入栈中,初始栈元素为-1# 遇到每个"("下标入栈# 遇到每个")"我们先弹出栈顶元素表示匹配了当前右括号# 栈底元素为最后一个没有匹配的右括号下标,其余都为左括号下标for i in range(len(s)):if s[i]=='(':stk.append(i)else:stk.pop()if not stk:stk.append(i) # 将最后一个没有被匹配的右括号的下标放在栈底else:#如果栈不为空,当前右括号的下标减去栈顶元素即为「以该右括号为结尾的最长有效括号的长度ans=max(ans,i-stk[-1])return ans
