数据结构之匹配符号
要求:从左到右读取一个符号串,然后判断符号是否匹配
分析:之前的匹配括号只是匹配符号的一个特例,而这里的符号还包括了{}[],只要保证左右符号匹配,就可以混用这些符号
操作:与之前的匹配符号类似,再遇见一个左符号时,我们将其放入栈中,但区别在于:当出现一个右括号时,我们需要检测其类型是否与栈顶的左符号匹配。如果不匹配,那么整个符号就不匹配。同样,当处理完整个符号串栈必须是空的,否则不匹配。
代码如下:
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:#else后面为遇见右括号的操作
if s.isEmpty():#如果栈是空的,可能是第一个是右符号。排除刚上来就是右符号
balanced=False
else:
top = s.pop()#删除栈顶的元素,并传递给top变量(返回顶端元素)
if not matches(top,symbol):#如果栈顶的元素(top)和下一个遇到的右符号(symbol)不匹配,匹配失败
balanced=False
index =index+1
if balanced and s.isEmpty():#遍历完符号,如果栈是空的,那么匹配正确
return True
else:
return False
def matches(open,close):#判断同种括号的匹配情况,注意内部每个参数是一个字符
opens="({["
closers=")}]"
return opens.index(open)==closers.index(close)
print(parchecker("((((())))))()"))
这里有最详细的代码解释,不懂可以继续提问哦!
如果你觉得有用就点个👍呗!!
关注我,带你学习更多数据结构知识!!!