32.最长有效括号
stack, dp, https://leetcode.cn/problems/longest-valid-parentheses/
给你一个只包含 '(' 和 ')' 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = "(()"
输出:2
解释:最长有效括号子串是 "()"示例 2:
输入:s = ")()())"
输出:4
解释:最长有效括号子串是 "()()"示例 3:
输入:s = ""
输出:0提示:
0 <= s.length <= 3 * 104s[i]为'('或')'
stack解法
python
class Solution:
def longestValidParentheses(self, s: str) -> int:
stack = [-1] # 初始化栈,-1表示上一个未匹配右括号的位置
max_length = 0 # 记录最长有效括号长度
for i, char in enumerate(s):
if char == '(':
stack.append(i) # 左括号入栈
else:
stack.pop() # 右括号尝试匹配
if not stack:
stack.append(i) # 如果栈为空,更新为当前右括号位置
else:
max_length = max(max_length, i - stack[-1]) # 更新最大长度
return max_length
if __name__ == "__main__":
sol = Solution()
s = "()()"
print(sol.longestValidParentheses(s)) # 输出应该是 4