首页 > 编程语言 >LeetCode-Top100: 有效的括号 (python)

LeetCode-Top100: 有效的括号 (python)

时间:2023-04-16 22:36:27浏览次数:39  
标签:压入 示例 python top 元素 stack 括号 Top100 LeetCode

 

给定一个只包括 '('')''{''}''['']' 的字符串 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),这个操作并不会删除栈顶元素。

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

  

 

标签:压入,示例,python,top,元素,stack,括号,Top100,LeetCode
From: https://www.cnblogs.com/huadongw/p/17324273.html

相关文章

  • NumPy 秘籍中文第二版:一、使用 IPython
    在本章中,我们将介绍以下秘籍:安装IPython使用IPython作为Shell阅读手册页安装matplotlib运行IPython笔记本导出IPython笔记本导入网络笔记本配置笔记本服务器探索SymPy配置文件简介IPython,可从ipython.org获得,是一个免费的开源项目,可用于Linux,Unix,MacOSX,和Windows......
  • Python 智能项目:1~5
    原文:IntelligentProjectsUsingPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c一、人工智能系统的基础人工智能(AI)在过去几年中一直......
  • Python 元学习实用指南:1~5
    原文:Hands-OnMetaLearningwithPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c一、元学习导论元学习是当前人工智能领域最有前途和......
  • python stata交互
    python和python:有所区别:python(不带冒号)遇到错误会保留在Python环境。python:(带冒号)遇到错误时会回到Stata环境。Python部分的代码写完之后,输入end退出Python环境。但输入end只是退出Python环境,Python环境并没有清除,下次输入python或者python:时会保......
  • Python 元学习实用指南:6~10
    原文:Hands-OnMetaLearningwithPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c六、MAML及其变体在上一章中,我们了解了神经图灵机(N......
  • Python 强化学习实用指南:1~5
    原文:Hands-OnReinforcementLearningwithPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c一、强化学习导论强化学习(RL)是机器学习的......
  • Python 强化学习实用指南:11~14
    原文:Hands-OnReinforcementLearningwithPython协议:CCBY-NC-SA4.0译者:飞龙本文来自【ApacheCN深度学习译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。不要担心自己的形象,只关心如何实现目标。——《原则》,生活原则2.3.c十一、策略梯度和优化在最后三章中,我们学......
  • LeetCode-Top100:两数之和(python)
     给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。 示例1:输入:nums=......
  • leetcode_打卡5
    leetcode_打卡5题目:345.反转字符串中的元音字母思路:双指针classSolution{publicStringreverseVowels(Strings){intn=s.length();char[]arr=s.toCharArray();inti=0;intj=n-1;while(i<j){while(i<n&&!yua......
  • 生产运作——多机调度问题(Python)
    多机调度问题是生产管理与控制的一个基本问题。按照加工设备数量和加工作业的流云方式,一般可分为单机调度、并行机调度、Flowshop调度、可重入式调度和Jobshop调度会多种类型。作业调度中的许多问题,不仅具有随机性、约束复杂、规模大及多目标冲突等点,而且许多都属于NP完全问题,即使......