括号问题一

题目

给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。

输出:

true:代表括号成对出现并且嵌套正确,或字符串无括号字符。

false:未正确使用括号字符。

分析

使用栈的思想,对输入从左到右依次判断,若是左括号,则入栈;若是右括号,则检测栈顶是否与当前右括号匹配,匹配成功则继续匹配,否则,直接输出错误。

此外,我个人认为存在几个细节问题:

1,若栈为空时,先出现右括号,若强行进行匹配会报错,可直接输出错误;

2,匹配结束后,若栈不为空,则需要输出错误,因为输入字符串中可能存在其他非法符号,因此不能直接通过判断长度是否是偶数来决定输出。

代码

while True:
    try:
        inps=input().strip()
        #解题思想是栈,用于存储左括号
        stacks=[]
        lef=['(','[','{']
        rig=[')',']','}']
        for item in inps:
            if item in lef:
                stacks.append(item)
            elif item in rig:
                indexs=rig.index(item)
                #右括号需要与左括号进行匹配,匹配成功则出栈,否则不合法
                if stacks and stacks[-1]==lef[indexs]:
                    stacks.pop()
                else:
                    print(False)
                    break
        else:
            #匹配结束,需判断栈是否为空,因可能存在非法符号,则不能直接根据输入括号的长度进行判断
            if stacks:
                print(False)
            else:
                print(True)
    except:
        break
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值