最長有效括號字串
阿新 • • 發佈:2018-12-23
題目描述
給定一個只包含 '(' 和 ')' 的字串,找出最長的包含有效括號的子串的長度。
示例 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))