给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例 1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例 2:
输入: ")()())
" 输出: 4 解释: 最长有效括号子串为"()()"
解题思路:
堆栈
因为要找到包含有效括号最长的子串,所以我们要定义一个start最为当前子串的起始位置。
从头开始遍历字符串(i):
如果当前字符为“(”:i(当前位置)入栈
如果当前字符为“)”:如果栈为空,不入栈(只有左括号的index才可以入栈),start=i+1,直接处理下一个字符
如果栈不为空,栈顶元素出栈,在进行判断:
如果栈为空:max_len= max(max, index-start+1)
如果栈不为空:max_len = max(max, index -栈顶的值) (“((())”)
代码:
class Solution:
def longestValidParentheses(self, s: str) -> int:
if len(s) == 0:
return 0
stack = []
max_len, start = 0, 0
for i in range(len(s)):
if s[i] == "(":
stack.append(i)
if s[i] == ")":
if len(stack) == 0:
start = i + 1
elif s[stack[-1]] == "(":
stack.pop(-1)
if len(stack) == 0:
max_len = max(max_len, i-start+1)
else:
max_len = max(max_len, i-stack[-1])
return max_len