首页 > 编程语言 >【算法题】20. 有效的括号-力扣(LeetCode)

【算法题】20. 有效的括号-力扣(LeetCode)

时间:2024-09-24 21:55:10浏览次数:3  
标签:20 示例 di 力扣 括号 true LeetCode

【算法题】20. 有效的括号-力扣(LeetCode)

1.题目

下方是力扣官方题目的地址

20. 有效的括号

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

有效字符串需满足:

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

示例 1:

**输入:**s = “()”

**输出:**true

示例 2:

**输入:**s = “()[]{}”

**输出:**true

示例 3:

**输入:**s = “(]”

**输出:**false

示例 4:

**输入:**s = “([])”

**输出:**true

提示:

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

2.题解

思路

本题可以使用栈这一数据结构来解决

左括号与右括号需要对应,也就是说,如果左边有n个左括号,那么右边必然也会有n个右括号与之对应。

利用这个关系,我们可以建立一个哈希表:

di={')':'(',']':'[','}':'{'}

将三种括号都对应起来

如何我们建立一个栈

我们遍历字符串s,如果栈为空或者栈顶的括号与遍历到的括号相对应,那么就出栈;反之则入栈。

到了遍历完之后如果栈为空,那么就是符合要求的,反之则不是

Python代码

class Solution(object):
    def isValid(self, s):
        """
        :type s: str
        :rtype: bool
        """
        at=[]
        di={')':'(',']':'[','}':'{'}
        for i in s:
            if not at or at[-1] !=di.get(i):
                at.append(i)
            else:at.pop()
        return False if at else True

3.结语

本人资历尚浅,发博客主要是记录与学习,欢迎大佬们批评指教!大家也可以在评论区多多交流,相互学习,共同成长。

标签:20,示例,di,力扣,括号,true,LeetCode
From: https://blog.csdn.net/Janium/article/details/142470542

相关文章

  • 2024.9.[23, 24]训练记录
    23上午whk。辅助角公式。诱导公式。23下午莫队:原序列分块。询问排序:第一关键字为左端点所在块的编号,第二关键字为右端点编号。回滚莫队:适用于增加或删除操作其中一个复杂度较大,但另一个较小的情况。可以做到只使用一种操作。排序后按照左端点的块编号一块一块做。排完......
  • 【算法题】11. 盛最多水的容器-力扣(LeetCode)
    【算法题】11.盛最多水的容器-力扣(LeetCode)1.题目下方是力扣官方题目的地址11.盛最多水的容器给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的......
  • 【算法题】53. 最大子数组和-力扣(LeetCode)
    【算法题】53.最大子数组和-力扣(LeetCode)1.题目下方是力扣官方题目的地址53.最大子数组和给你一个整数数组nums,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组是数组中的一个连续部分。示例1:输入:nums=[-2,1,-3,4,-1,2,1,-......
  • 2024CSP-S提高组初赛试题及解析( 第一部分选择题(1-5))
    ......
  • 2024CSP-S提高组初赛试题及解析( 第一部分选择题(6-10))
    ......
  • 2024CSP-S提高组初赛试题及解析( 第一部分选择题(10-15))
    ......
  • 2023CSP-J 普及组第二轮试题及解析( 第三题一元二次方程)
    参考程序代码:#include<bits/stdc++.h>usingnamespacestd;intt,m,a,b,c;intaa,bb,gd1,gd2;intgcd(inta,intb){ if(a%b==0)returnb; returngcd(b,a%b);}intmain(){ scanf("%d%d",&t,&m); while(t--) { scanf("%d%d%d"......
  • Day5 JavaWeb知识了解以及每日一题:力扣125.验证回文串
    Day5JavaWeb知识了解以及每日一题:力扣125.验证回文串2024年9月24日20:06:45JavaWeb基础知识TomcatApacheTomcat是一个开源的Servlet容器和Web服务器,它是JavaEE(EnterpriseEdition)的一部分,专门用于运行JavaServlet和JavaServerPages(JSP)。Tomcat的主要功能是接收HTTP......
  • [COCI2015-2016#2] VUDU
    [COCI2015-2016#2]VUDU题意求一个序列中有多少个子段平均数大于\(P\)。思路区间和相关的问题可以考虑前缀和。对于原序列前缀和序列\(a\),询问等价于求数对\((l,r)(l\ler)\)的个数,满足:\[\frac{a_r-a_{l-1}}{r-l+1}\geP\]移项整理得:\[a_r-Pr\gea_{l-1}-P(l-1)\]......
  • [COCI2009-2010#2] PASIJANS
    [COCI2009-2010#2]PASIJANS题意给出\(n\)个栈,每次可从任意一个栈取出栈顶放入答案队列。求字典序最小的答案队列。思路考虑贪心。每次从字典序最小的栈中取出栈顶。如何动态找出字典序最小的栈?可以使用堆,单次\(O(1)\)查找最小值,\(O(\logn)\)插入。但比较两个栈的字......