括号匹配

括号序列

链接: https://www.bilibili.com/video/BV1j54y1x7wj?from=search&seid=6645398165143026340.

题目描述
给出一个仅包含字符’(’,’)’,’{’,’}’,’[‘和’]’,的字符串,判断给出的字符串是否是合法的括号序列。
括号必须以正确的顺序关闭,"()“和”()[]{}“都是合法的括号序列,但”(]“和”([)]“不合法。
示例1:
输入:”["
返回:“false”
示例2:
输入:"[]"
返回:“true”
解题思路
看到括号匹配的问题,首选的就是用解决。
对于本题中给出的三种括号,当我们遇到‘(’,‘{’,‘[’,就往栈里加入对应的反括号即‘)’,‘}’,‘]’,然后开始遍历序列,把对应的括号加入栈中,并进行匹配。
对于“[]}}”这中样例,在遍历的时候,中途过程中我们的栈就会变空,所以这种情况可以直接返回false;对于“[}”这种样例,就是括号不匹配,因为我们遇见括号的时候会和栈顶元素进行比较,而这种样例,肯定和栈顶元素匹配不成功的,所以返回false;最后还需要判一下栈是否为空,因为会存在这样的样例:“[[[[”。

遍历括号序列,遇到左括号的情况就入栈,遇到右括号就将当前栈中栈顶元素出栈,当前栈中栈顶元素与当前遍历的右括号进行比较,看是否匹配,从而验证其合法性。

  • 整个括号的序列遍历完成后,如果栈为空则表示该括号序列为合法的,如果此时栈中仍有元素,即栈不为空,则说明该括号序列不合法,返回false
  • 如果遍历中遇到右括号时,栈为空或者没有与当前右括号匹配的左括号,则说明该括号序列为不合法的,返回false
  • 要考虑括号序列中只有一个元素的情况,直接返回false
    完整代码
# @param s string字符串 
# @return bool布尔型
#
class Solution:
    def isValid(self , s ):
        # write code here
        stack = []
        for i in s:
        	if len(stack)==0:
                stack.append(i)
                continue
        	if i in ['(','[','{']:
        		stack.append(i)
        	if i == ')' and stack[-1] == '(':
        		stack.pop()
        	if i == '[' and stack[-1] == ']'
        		stack.pop()
        	if i == '{' and stack[-1] == '}'
        		stack.pop()
        	else:
        		return false
        # 循环结束后判断栈是否为空,栈为空说明匹成功,栈不为空说明匹配失败
        if not stack:
        	return true
        else:
        	return false
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值