题目内容:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]'的字符串,判断字符串是否有效。
有效字符串需满足:
(1)左括号必须用相同类型的右括号闭合。
(2)左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
具体代码如下
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中北京大学陈斌副教授的MOOC:《数据结构与算法Python版》