任务描述
本关任务:编写程序检查该字符串的括号是否成对出现。
相关知识
为了完成本关任务,你需要掌握:栈的 Python 实现。栈的相关知识及其实现参见第一关。
编程要求
根据提示,在右侧编辑器 Begin - End 之间补充代码,判断字符串是否有效,即字符串中括号是否成对出现。若是,则输出 True ,否则输出 False 。其中字符串的字符只包含三种括号,花括号{}
、中括号[]
、圆括号()
,即它仅由 (
、)
、[
、]
、{
、}
六个字符组成。
提示
-
S1:遍历输入的括号序列,如果是左括号,进入S2,如果是右括号,进入S3;
-
S2:如果当前遍历到左括号,则入栈;
-
S3:如果当前遍历到右括号,则出栈一个元素,看其是否与当前的右括号组成一对,如果不是,则匹配失败。或者在出栈过程中发生异常(从空栈中出栈),也匹配失败;
-
S4:若能顺利遍历完成,检查栈中是否还有剩余元素,如果有,则匹配失败;如果没有,则匹配成功。
测试说明
平台会对你编写的代码进行测试,比对你输出的数值与实际正确数值,只有所有数据全部计算正确才能通过测试:
测试输入:{ [ ] ( ) }
预期输出:True
测试输入:[ ( { } [ ] ) ]
预期输出:True
开始你的任务吧,祝你成功!
参考答案
# -*- coding: utf-8 -*-
class Stack():
# 创建空列表实现栈
def __init__(self):
self.__list = []
# 判断是否为空
def is_empty(self):
return self.__list == []
# 压栈,添加元素
def push(self,item):
self.__list.append(item)
# 弹栈,弹出最后压入栈的元素
def pop(self):
if self.is_empty():
return
else:
return self.__list.pop()
'''请在Begin-End之间补充完成代码, 完成syntaxChecker函数, 解决括号匹配问题'''
def syntaxChecker(strList):
### strList: 字符串列表
stack = Stack()
left = '([{' # 左括号
right = ')]}' # 右括号
flag = True # 标志位
# ********** Begin ********** #
# 遍历输入
for i in strList:
# 左括号,入栈
if i in left:
stack.push(i)
# 右括号,出栈
elif i in right:
#出栈异常,左括号为空,存在右括号,不匹配
if stack.is_empty():
flag = False
break
else:
j = stack.pop()
# 左右不匹配,False
if left.find(j) != right.find(i):
flag = False
break
# 遍历后,栈非空,说明说明左括号个数大于右括号,不匹配
if not stack.is_empty:
flag = False
# ********** End ********** #
return flag
if __name__ == "__main__":
strList = input().split()
result = syntaxChecker(strList)
print(result)