最长有效括号
1. 题目描述:
给定一个只包含 '('
和 ')'
的字符串,找出最长的包含有效括号的子串的长度。
示例1:
输入: "(()"
输出: 2
解释: 最长有效括号子串为 "()"
示例2:
输入: ")()())"
输出: 4
解释: 最长有效括号子串为 "()()"
2. 解题思路
这是一道动态规划问题。维护一个一维数组num,num[i]表示截止到s[i]包含s[i]的最长有效括号字符串长度。使用栈,当字符为 ‘(‘ ,其下标进栈;当字符为 ‘)’ ,若栈空,说明该处使有效字符串中断,即num[i]=0, 否则num[i]=i-栈顶值+1+num[栈顶值-1]。
python代码:
class Solution:
def longestValidParentheses(self, s):
"""
:type s: str
:rtype: int
"""
n=len(s)
Stack=[0 for i in range(n)]
num=[0 for i in range(n)]
res,tmp=0,0
j=0
for i in range(n):
if s[i]==')':
if j==0:
if tmp>res:
res=tmp;
tmp=0
else:
num[i]=i-Stack[j-1]+1
if Stack[j-1]>0:
num[i]+=num[Stack[j-1]-1]
tmp=num[i]
if tmp>res:
res=tmp
j-=1
else:
Stack[j]=i
j+=1
return res
最关键的就是维护一位数组num,以及将 ‘(‘ 的下标入栈,而不是'(‘ 。
以上。