005 题目如下:
给定一个字符串,里边可能包含“()”、"{}"、“[]”三种括号,请编写程序检查该字符串的括号是否成对出现。
输出:
true:代表括号成对出现并且嵌套正确,或字符串无括号字符。
false:未正确使用括号字符。
流程分析:
如果了解数据结构,那么应该知道,简单的采用一个栈的特性,就能解决该问题,左括号栈顶字符必须和第一个入栈的右括号字符匹配。
- 栈介绍:栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。
- 栈的特性:后进先出(LIFO)
下面用一幅流程图来说明程序运行步骤:
1、先定义一个栈,把符号写成一个字典的形式,分别定义左符号、右符号
2、判断字符串中是否有左符号,如果有,加入栈列表
3、判断字符串中是否有右符号,如果有:
3.1、如果栈不为空,并且右符号是栈列表中最后一个值得右符号,删除栈列最后一个值,用pop方法
3.2、不满足情况,则返回False
4、返回 not 栈--也就是栈为空的话,返回为True,如果栈列表为空,返回False (将剩余的有值的栈列错误排除掉)
代码分析:
BRANKETS={">":"<",")":"(","}":"{"} BRANKETS_LEFT=BRANKETS.values() BRANKETS_RIGHT=BRANKETS.keys() def branket_check(str): stack=[] for char in str: if char in BRANKETS_LEFT: stack.append(char) if char in BRANKETS_RIGHT: if stack and stack[-1]==BRANKETS[char]: stack.pop() else: return False return not stack def main(): s=input("输入您要查询的字符串:") if branket_check(s): print("