题目
给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。
输出:
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