实验目的:
编写一个算法,从左到右读取一个括号串,然后判断其中的括号是否匹配。
为了解决这个问题,需要注意到一个重要现象,从左到右处理括号时,最右边的无匹配左括号必须与接下来遇到的第一个右括号相匹配,并且在第一个位置的左括号可能要等到处理至最后一个位置的右括号时才能完成匹配。相匹配的右括号与左括号出现的顺序相反。这一规律暗示着能用栈来解决括号匹配问题。
方法:
由一个空栈开始,从左到右依次处理括号,如果遇到左括号,便通过push操作将其加入栈中,以此表示稍后需要有一个与之匹配的右括号。反之,如果遇到右括号,就用pop操作。
只要栈中的所有左括号都能遇到与之匹配的右括号,那么整个括号就是匹配的。
在处理完匹配的括号之后,栈应该是空的。
python代码如下:
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
else:
s.pop()
index =index + 1
if balanced and s.isEmpty():
return True
else:
return False