实际编程中,我们经常嵌套使用括号(“{}”、“[]” 、 “()”),如果括号太多,可能会出现括号不匹配的情况,比如“(as))”、“{(bcd})”等。现用栈判断一串字符中的括号是否匹配。此代码不检查小括号是否一定被大级别括号包着,只检查左括号与右括号是否对应。
#括号匹配,用栈实现
#只用判空、压栈、弹栈功能即可
class Stack:
def __init__(self):
self.lista = []#创建空栈
def isEmpty(self):
return len(self.lista) == 0
def push(self,item):
self.lista.append(item)
def pop(self):
if self.isEmpty():
return "Error:The stack is empty"
else:
return self.lista.pop()
def matching(inputstring):#输入是一串字符
bktStack = Stack()#创建类实例
leftbkt = "{[("
rightbkt = "}])"
#对于每个输入字符
for i in inputstring:
#遇到左括号,就将其压栈
if i in leftbkt:
bktStack.push(i)
#遇到右括号
elif i in rightbkt:
#若已没左括号与之匹配
if bktStack.isEmpty():
#不匹配,结束
return False
#左括号按什么顺序入,右括号应按相反顺序消掉。
#如果匹配,右括号消的始终是栈顶括号。
#弹栈bktStack.pop(),判断栈顶左括号与当前右括号是否匹配
if rightbkt.index(i) != leftbkt.index(bktStack.pop()):
#不匹配,结束
return False
#若一直没有return而是遍历了一遍,且没有多余左括号留在栈中,则说明匹配。反之不匹配。
return bktStack.isEmpty()
#测试函数
stringa = input()
print(matching(stringa))
运行实例: