• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
华东 博客
17年国科大博士毕业,曾就职于三星电子,清华博后,目前在某大模型创业公司工作,研究方向大模型、智能体 新浪博客: http://blog.sina.com.cn/u/2463286753
博客园    首页    新随笔    联系   管理    订阅  订阅
LeetCode-Top100: 有效的括号 (python)

 

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

有效字符串需满足:

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

 

示例 1:

输入:s = "()"
输出:true

示例 2:

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

示例 3:

输入:s = "(]"
输出:false

 

提示:

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

 

实现:

可以使用栈来解决这个问题。遇到左括号就入栈,遇到右括号就判断栈顶是否匹配,如果匹配则出栈,否则返回False。如果最后栈为空,则说明所有括号都匹配成功,返回True。

以下是Python的实现代码:

class Solution:
    def isValid(self, s: str) -> bool:
        stack = []
        for c in s:
            if c in ('(', '[', '{'):
                stack.append(c)
            else:
                if not stack:
                    return False
                top = stack.pop()
                if (top == '(' and c != ')') or \
                   (top == '[' and c != ']') or \
                   (top == '{' and c != '}'):
                    return False
        return not stack

时间复杂度为O(n),其中n为字符串s的长度,空间复杂度也为O(n),即栈的最大长度。

 

知识点:

栈是一种数据结构,它遵循“后进先出”(LIFO)的原则。也就是说,最后压入栈中的元素最先弹出,而最先压入栈中的元素最后弹出。

栈有两个基本操作:压入(push)和弹出(pop)。当一个元素被压入栈中,它就成为了栈的顶部元素(top)。当需要弹出一个元素时,栈会弹出栈顶元素,并把它从栈中删除。

栈的另外一个重要的操作是查看栈顶元素(top),这个操作并不会删除栈顶元素。

栈的应用十分广泛,例如程序中函数的调用栈就是一个典型的栈结构。当一个函数被调用时,它会被压入栈中,当函数执行完毕时,它会被弹出栈。栈还可以用来实现括号匹配、浏览器的后退功能等。

  

 

posted on 2023-04-16 22:17  华东博客  阅读(68)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3