力扣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操作

### 力扣平台上的题目列表 力扣LeetCode)提供了一个广泛而深入的编程挑战库,旨在帮助开发者提高算法技能并准备技术面试。网站上包含了数千道不同难度级别的题目,涵盖了各种数据结构和算法主题。 #### 浏览方式 用户可以通过多种方式进行浏览: - **按标签分类**:每道题都有特定的主题标签,比如数组、字符串、链表等[^1]。 - **按照难度筛选**:可以依据简单、中等、困难三个级别来过滤题目[^2]。 - **热门题目推荐**:首页会展示一些受欢迎或是经常被提及作为面试题目的练习[^3]。 对于具体提到的一些经典问题实例,如下所示: - 寻找两个正数数组中的中位数属于二分查找的经典应用之一; - 盛最多水的容器则是双指针技巧的良好示范案例; - 字符串排列以及缺失的第一个正数都是考察基础概念理解的好例子; - 对于链表操作方面,则有关于旋转链表的具体实现方法; - 判断回文链表也是常见的链表类习题之一; - 使用`zip()`函数求解最长公共前缀展示了Python内置工具的应用场景; -有效括号验证则涉及栈的数据结构特性。 为了更方便地找到感兴趣的题目,建议访问官方网站或其移动端应用程序,在那里可以根据个人需求定制化搜索条件获取最合适的练习资源。 ```python # 示例代码片段用于说明如何利用官方API接口获取部分公开题目信息(假设存在这样的功能) import requests def get_leetcode_problems(): url = 'https://leetcode.com/api/problems/all/' response = requests.get(url).json() problems_list = [] for stat in response['stat_status_pairs']: problem_data = { "title": stat["stat"]["question__title"], "difficulty": stat["difficulty"]["level"] } problems_list.append(problem_data) return problems_list[:5] # 返回前五个题目供查看 print(get_leetcode_problems()) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值