32. 最长有效括号

 ̄綄美尐妖づ 提交于 2020-02-04 12:35:44

给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。

示例 1:
输入: “(()”
输出: 2
解释: 最长有效括号子串为 “()”

思路

class Solution():
    def longestValidParentheses(self,s):
        ans = 0
        stack = [-1] # 先初始化一个-1,这样即使第一个相减也是得到1
        for i in range(0, len(s)):
            # 遇到左括号进栈,遇到右括号出一个左括号。
            # 相当于每次计算可以消去的括号的索引差,即长度,求一个最大的长度。
            if s[i] == "(":
                stack.append(i)
            else:
                stack.pop(-1)
                if len(stack)==0: # 栈为空时,把右括号的索引加入栈中,用来后面相减
                    stack.append(i)
                else:
                    ans = max(ans,i-stack[-1]) # i为当前数的索引,stack[-1]为上次符合条件的前一个数,相减为长度
        return ans
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!