题目内容
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 "()()"
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
题目思路
这道题也是一种栈的应用,但是不同的是,上次的栈应用是基本的记录字符,这次还需要记录位置,从而获得最长的位置。当读取到左括号的时候,入栈位置。当读取到右括号时,分为两种情况。一种是已经空栈了,这种情况下,说明这个长周期已经结束了。直接把start开始到下一位,重新计算。另一种是没有空栈,这种情况下依旧分为两种。首先把最近的左括号出栈,接下来如果空栈,则直接和start位置计算长度。如果没有空,则和栈最后一个数字的位置来计算长度即可。
程序代码
class Solution(object):
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
start=0
stack=[]
max_len=0
for i in range(len(s)):
print(stack,start,max_len)
if s[i]=='(':
stack.append(i)
else:
if not stack:
start=i+1
else:
stack.pop()
if not stack:
max_len=max(max_len,i-start+1)
#print('1')
else:
max_len=max(max_len,i-stack[-1])
#print('2',i,stack[-1])
return max_len