题目
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.
Subscribe to see which companies asked this question
题目要求
字符串s由左右括号组成(‘(‘,’)’),找到字符串中最长有效括号的子串。
解题思路
此题参考南郭子綦的思路。用一个栈来存储左括号的索引,遇到正确匹配的括号则弹出匹配的索引,所以栈中存储的是未匹配上的左括号。新匹配上的括号位置到前一段未匹配到的括号的索引差极为有效括号的大小。
代码
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