当前位置: 首页 > article >正文

【LeetCode20】有效的括号

题目描述

给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
每个右括号都有一个对应的相同类型的左括号。

思路与算法

  1. 栈的使用:
    当我们遍历字符串 s 中的每个字符时:
    • 如果遇到 左括号(‘(’, ‘{’, ‘[’),我们将其压入栈中。
    • 如果遇到 右括号(), }, ]),我们检查栈顶的元素:
      • 如果栈为空,说明没有对应的左括号,返回 False。
      • 如果栈顶元素是对应的左括号(例如,遇到 ) 时,栈顶应该是 ‘(’),则将栈顶元素弹出,继续检查下一个字符。
      • 如果匹配不成功,立即返回 False。
  2. 字符串遍历完成后:
    如果栈为空,说明所有的括号都已成功匹配,返回 True。
    如果栈不为空,说明还有未匹配的左括号,返回 False。

代码

class Solution:
    def isValid(self, s: str) -> bool:
        # 初始化一个栈来存储左括号
        stack = []

        # 初始化哈希表,存储括号的配对关系
        bracket_map = {')':'(', '}':'{',']':'['}

        # 遍历
        for char in s:
            # 如果是右括号
            if char in bracket_map:
                # 检查栈顶是否匹配
                top_element = stack.pop() if stack else '#'
                if top_element != bracket_map[char]:
                    return False
            else:
                stack.append(char)
        
        return not stack
        

使用一个哈希表 bracket_map 来存储右括号对应的左括号映射。这样当遇到一个右括号时,我们就可以通过查找哈希表快速获得它对应的左括号 if top_element != bracket_map[char]:

此外,在字典中,in 运算符默认检查的是字典的键,而不是值。

总结

  1. 在 Python 中,列表有以下几种方法可以帮助我们模拟栈的行为:
    append(x):将元素 x 推入栈的顶部(即列表的末尾)。
    pop():移除并返回栈顶部的元素(即列表的最后一个元素)。
    这两个方法完美地支持栈的基本操作(压栈和弹栈),因此我们可以利用列表来实现栈的功能。
  2. 使用栈和哈希表处理括号匹配是常见的技巧.

http://www.kler.cn/a/562456.html

相关文章:

  • LeetCodeHot100_0x02
  • Fisher散度:从信息几何到机器学习的隐藏利器
  • QT MD5校验文件和数据的完整性
  • 国内访问Github的四种方法(2025版)
  • 堆排序:高效的选择排序
  • selenium如何实现,开启浏览器的开发者工具模式,并且开启 toggle移动设备模拟模式
  • 视频编解码技术-3: H.264和VP9压缩效率和编码时延
  • Ubuntu22上安装MySQL8启动成功,远程无法连接
  • vue2中,打包报错ERROR in /node_modlules/@types/lodash/common/common.d.ts 26
  • 041集——选取若干点生成三角网(CAD—C#二次开发入门)
  • 贪心3 跳跃游戏 II
  • C++基础入门——Vetor与函数
  • 【行业解决方案篇九】【DeepSeek能源勘探:地震波数据智能解释】
  • WPS PPT插入各种线型形状(如画直线)的时候总是有箭头,如何还原成只画直线
  • Eclipse导入forge-1.21.x
  • 【深度学习】强化学习(RL)-PPO(Proximal Policy Optimization,近端策略优化)
  • github 推送的常见问题以及解决
  • 6.6.2 SQL数据定义
  • 大语言模型中的梯度值:深入理解与应用
  • 微信小程序radio,改成实心圆