Given a string containing just the characters '('
and ')'
, find the length of the longest valid (well-formed) parentheses substring.
For "(()"
, the longest valid parentheses substring is "()"
, which has length = 2.
Another example is ")()())"
, where the longest valid parentheses substring is "()()"
, which has length = 4.
用一个栈来存储左括号的索引,遇到正确匹配的括号则弹出匹配的索引,所以栈中存储的是未匹配上的左括号。新匹配上的括号位置到前一段未匹配到的括号的索引差极为有效括号的大小。
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
stack = []
maxLen = 0
last = -1
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
if not stack:
last = i
else:
stack.pop()
if not stack:
maxLen = max(maxLen, i - last)
else:
maxLen = max(maxLen, i - stack[-1])
return maxLen