码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 20. 有效的括号-栈的应用


    20. 有效的括号

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

    有效字符串需满足:

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

    示例 1:

    1. 输入:s = "()"
    2. 输出:true

    示例 2:

    1. 输入:s = "()[]{}"
    2. 输出:true

    示例 3:

    1. 输入:s = "(]"
    2. 输出:false

    提示:

    • 1 <= s.length <= 104
    • s 仅由括号 '()[]{}' 组成

    解题思路

    当开始接触题目时,我们会不禁想到如果计算出左括号的数量,和右括号的数量,如果每种括号左右数量相同,会不会就是有效的括号了呢?

    事实上不是的,假如输入是 [{]},每种括号的左右数量分别相等,但不是有效的括号。这是因为结果还与括号的位置有关。

    仔细分析我们发现,对于有效的括号,它的部分子表达式仍然是有效的括号,比如 {()[()]} 是一个有效的括号,()[{}] 是有效的括号,[()] 也是有效的括号。并且当我们每次删除一个最小的括号对时,我们会逐渐将括号删除完。比如下面的例子。

    这个思考的过程其实就是栈的实现过程。因此我们考虑使用栈,当遇到匹配的最小括号对时,我们将这对括号从栈中删除(即出栈),如果最后栈为空,那么它是有效的括号,反之不是。

    实现代码:

    1. class Solution:
    2. def isValid(self, s: str) -> bool:
    3. stack = []
    4. dic = {')':'(',']':'[','}':'{'}
    5. for i in s:
    6. if(stack and i in dic):#i in dic表示, i在{')',']','}'}范围内
    7. if(stack[-1] == dic[i]):#当栈顶字符和i遍历到的字符配对时
    8. stack.pop()#弹出栈顶元素
    9. #每当匹配到{')',']','}'}时,该位置的左侧必然会一个能匹配的字符,否则匹配不成功
    10. else: return False
    11. else:
    12. stack.append(i)
    13. return len(stack) == 0

    参考:力扣 

    下面还有一个更加简单的做法:

    就先找到那个最小的能够匹配字符串,然后用空字符('')把它替换掉,接着再在新的字符串里找能都匹配的最小字符串,再用''把它替换掉,如果到最后最初的字符串变成空字符'',那么就说明是有效的括号。

    1. class Solution:
    2. def isValid(self, s: str) -> bool:
    3. while('[]' in s or '{}' in s or '()' in s):
    4. s = s.replace('[]', '')
    5. s = s.replace('{}', '')
    6. s = s.replace('()', '')
    7. return s == ''

  • 相关阅读:
    OKR能解决的具体问题列表,你的组织有几条?
    JS--对象数组深拷贝的方法
    在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?
    [附源码]java毕业设计8号体育用品销售及转卖系统
    LeetCode 2897. 对数组执行操作使平方和最大【贪心,位运算,哈希表】2301
    Python GUI案例之看图猜成语开发(第一篇)
    H.迷宫,(算法选修)
    【AI领域+餐饮】| 论ChatGPT在餐饮行业的应用展望
    基于YOLOv8模型的足球目标检测系统(PyTorch+Pyside6+YOLOv8模型)
    距离度量方法
  • 原文地址:https://blog.csdn.net/wangjian530/article/details/127772537
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号