最长有效括号字串

题目描述

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

示例 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))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值