思想: stack保存下标
第一个为-1, 因为需要保证stack里面数字的连续性,才能计数。
比如:
1 [()]
第一次遍历,stack = [-1, 0], -1和0连续,
第二次遍历,stack = [-1], i = 1, res = 1-(-1) = 2, 为正确结果。
2 [))]
第一次遍历,stack = [], 然后stack = [0]
第二次遍历,stack = [], 然后stack = [1], 结束循环,因为没有遇到“(”, 所以结果为0.
2 [))()()]
第一次遍历,stack = [], 然后stack = [0]
第二次遍历,stack = [], 然后stack = [1],
第三次遍历,stack = [1, 2]
第四次遍历,stack = [1], 然后res = 3 - 1 = 2
第五次遍历,stack = [1, 4],
第六次遍历,stack = [1], 然后res = max(2, 4) = 4
class Solution:
def longestValidParentheses(self, s: str) -> int:
stack = [-1]
res = 0
for i in range(len(s)):
if s[i] == "(":
stack.append(i)
else:
stack.pop()
if len(stack) == 0:
stack.append(i)
else:
res = max(res, i - stack[-1])
return res