力扣32最长有效括号

题目描述

 

力扣思路

 上面是大致思路

下面是具体细节代码

力扣代码

class Solution:
    def longestValidParentheses(self, s: str) -> int:
        if not s:return 0

        stack = []
        ans = 0
        for i in range(len(s)):
            if not stack or s[i] == '(' or s[stack[-1]] == ')':
                stack.append(i)
            else:
                stack.pop()
                ans = max(ans,i-(stack[-1] if stack else -1))
        return ans

首先,判断s是否为空,若为空直接返回0

然后闯将两个变量stack 和 ans=0

对字符串进行for循环,如果出现stack不为空,当前字符为左括号,或栈顶为有括号的情况,则将元素添加入stack栈中;如果stack为空,则stack直接弹出栈顶元素,对ans进行记录,找原ans与i-(stack[-1] if stack else -1 的值,这里面解释为如果栈顶元素为空,返回-1 若不为空,则stack[-1]为stack顶元素的索引。

最后返回ans

主要思想是:创建一个栈,不断向栈中加入左右括号,不断抵消,唯一关键是计算匹配括号的方法为总长度-未匹配留在栈中元素长度 = 匹配的长度  也就是剩余长度

另一种代码:

class Solution:  
    def longestValidParentheses(self, s: str) -> int:  
        n = len(s)  
        cs = list(s)  
        d = deque()  
        ans = 0  
        i, j = 0, -1  
        for i in range(n):  
            if cs[i] == '(':  
                d.append(i)  
            else:  
                if not d.empty():  
                    d.pop()  
                    top = j  
                    if not d.empty():  
                        top = d[-1]  
                    ans = max(ans, i - top)  
                else:  
                    j = i  
        return ans  

看代码可以实现,但是自己想的话就不会了。难点感觉在于无法系统的掌控所有可能出现的情况。

知识积累

python中的入栈和出栈:入栈与出栈直接可以通过设置数组 对数组进行pop和append操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值