[LeetCode] 32. Longest Valid Parentheses
阿新 • • 發佈:2018-12-27
最長有效括號
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,以及將 '(' 的下標入棧,而不是'(' 。
以上。