题目
给你一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长有效(格式正确且连续)括号子串的长度。
示例 1:
输入:s = “(()”
输出:2
解释:最长有效括号子串是 “()”
示例 2:
输入:s = “)()())”
输出:4
解释:最长有效括号子串是 “()()”
示例 3:
输入:s = “”
输出:0
提示:
0 <= s.length <= 3 * 104
s[i] 为 ‘(’ 或 ‘)’
思路
栈模拟执行一遍, 设定一个bool数组(或者整型), 不能匹配的位置设为false, 题目化归为求最大连续true的长度.
代码
class Solution:
def longestValidParentheses(self, s: str) -> int:
L = len(s)
stack = []
flags = [0 for _ in range(L)]
for i in range(L):
if s[i] == '(': stack.append(i)
else:
if not stack: flags[i] = 1 # ) is no use
else: stack.pop() # () matched
while stack: # ( is no use
flags[stack[-1]] = 1
stack.pop()
ans = 0
temp = 0
for i in range(L):
if flags[i] == 0: temp += 1
else: temp = 0
ans = max(temp, ans)
return ans