Longest Valid Parentheses
Given a string containing just the characters '(' and ')', find the length of the longest valid (well-formed) parentheses substring.
Example 1:
Input: "(()"
Output: 2
Explanation: The longest valid parentheses substring is "()"
Example 2:
Input: ")()())"
Output: 4
Explanation: The longest valid parentheses substring is "()()"
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
maxlen = 0
stack = list()
last = -1
for i in range(len(s)):
if s[i] == '(':
stack.append(i)
else:
if stack == []:
last = i
else:
stack.pop()
if stack == []:
maxlen = max(maxlen, i- last)
else:
maxlen = max(maxlen, i-stack[len(stack)-1])
return maxlen
一切还可以简化:
class Solution:
def longestValidParentheses(self, s: str) -> int:
res=0
stack=[-1]
for i in range(len(s)):
if s[i]=='(':
stack.append(i)
else:
stack.pop()
if not stack:
stack.append(i)
else:
res = max(res, i - stack[-1])
return res