1. 程式人生 > >最長有效括號字串

最長有效括號字串

題目描述

給定一個只包含 '(' 和 ')' 的字串,找出最長的包含有效括號的子串的長度。

示例 1:

輸入: "(()"
輸出: 2
解釋: 最長有效括號子串為 "()"
示例 2:

輸入: ")()())"
輸出: 4
解釋: 最長有效括號子串為 "()()"

解題思路

這一題目是"判斷合法括號"的擴充套件,首先考慮到用"棧"這種儲存結構
構造一個棧,通過壓棧出棧的方式判斷字串中每個括號的匹配情況。以字元“()(()”為例,
這裡匹配出來的結果是 11011也就是說前面兩個是用11表示的是一對匹配的括號,
這裡我們只要在這個新得出的數組裡面找到連續的就行了,
能保證有正確的0分割點就可以通過上面的字串計算出最長的長度的 。## python 實現
複製直接跑


class Solution:
    @staticmethod
    def longestValidParentheses(s):
        """
        :type s: str
        :rtype: int
        """
        stack = []
        sign_list = ['0']*len(s)
        for index,char in enumerate(s):
            if char == "(":
                stack.append((char,index))
elif len(stack)==0: continue elif stack[-1][0]=="(": token=stack.pop() sign_list[token[-1]],sign_list[index]='1','1' else: continue tmp = "".join(sign_list) tmp_list=tmp.split("0") len_list=
[len(str(token)) for token in tmp_list] return max(len_list) if __name__=="__main__": s='))))())()()(()' print(Solution.longestValidParentheses(s))