NO32.有效的括号

暴力解法,俩次循环第一次记录(的每个下标,再分别做判断
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        lg = len(s)
        nums = [i for i in range(lg) if s[i] == '(']
        if len(nums) == lg:
            return 0
        ret = 0
        for left in nums:
            a, b = 0, 0
            for i in range(left, lg):
                if s[i] == '(':
                    a += 1
                else:
                    b += 1
                if a == b:
                    ret = max(ret, a * 2)
                elif b > a:
                    break
        return ret
#括号匹配,由于是一对因此想到栈,只是需要考虑如何表示有效长度的问题
class Solution:
    def longestValidParentheses(self, s: str) -> int:
        res = 0
        stack = [-1] #为了方便记录当前有效长度
        for i,c in enumerate(s):
            if c=='(':# 如果是(,直接进栈
                stack.append(i)
            elif len(stack)==1: #代表stack已经没有(
                stack.pop()
                stack.append(i)
            else:
                stack.pop()
                res = max(res,i-stack[-1]) #更新
        return res

 

 

 

 
 
posted @ 2022-07-16 17:05  是冰美式诶  阅读(45)  评论(0)    收藏  举报