有效的括号
题目内容:
给定一个只包括’(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
输入格式:
一行字符串
输出格式:
True或False,表示该输入是否为合法括号串
class stackDT:
'''构造栈'''
def __init__(self):
self.items = []
def isempty(self):
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def size(self):
return len(self.items)
def main():
'''主函数'''
inputstr = input()
checkstr = stackDT()
strdict = {'(':')','[':']','{':'}'}
output = True
for i in inputstr:
if i in '([{': #如果为左括号,直接压入栈
checkstr.push(i)
else:
if checkstr.isempty(): #如果为右括号且栈为空,则结果为False,且跳出程序,
output = False
break
else: #如果栈内左括号与之配套,则删除栈顶数据,否则报错,且跳出程序
topstr = checkstr.pop()
if strdict[topstr] != i:
output = False
break
if checkstr.isempty() and output:
print('True')
else:
print('False')
main()
题目来源:中国大学MOOC(慕课)北大陈斌老师的《数据结构与算法Python版》课程