栈的应用之匹配括号
要求:从左到右读取一个括号串,然后判断其中的括号是否匹配。
分析:每一个左括号都必须有与之对应的右括号,并且括号对有正确的嵌套关系。我们可以发现:最右边的左括号必须与接下来遇到的第一个右括号相匹配。第一个位置的左括号可能要等到处理最后一个位置的右括号时才能进行匹配。相匹配的右括号与左括号出现的顺序相反。(反转特性是栈的一个重要特点)
操作:由一个空栈开始,遇到一个左括号就添加到栈中,以此表示之后需要有一个与之匹配的右括号。若果遇到右括号,则删除一个左括号。只要栈中所有左括号都能遇到与之匹配的右括号,那么就是匹配的。
代码如下
from pythonds.basic import Stack
def parchecker(symbolstring):
s=Stack()
balanced=True
index=0
while index<len(symbolstring) and balanced: #遍历你的输入
symbol=symbolstring[index]
if symbol =="(":
s.push(symbol) #如果是左括号就把他添加到栈里面
else: #若果是右括号
if s.isEmpty():
balanced=False #如果栈是空的,则无法匹配直接Flase,这样第一次遇见“)”就是不对
else:
s.pop() #栈不是空的,就删除顶部元素,这样一对括号就对应了
index =index+1 #通过加一遍历你的每个输入
if balanced and s.isEmpty(): #当while循环完的时候,如果balanced=True并且栈
#是空的,那么就对了,显然第一个若果是右括号就不对
return True
else:
return False
print(parchecker("((((())))))()"))
代码有详细的解释。
如果内容对你有帮助就点个👍呗!!
关注我,领略更多数据结构方面的知识!!!