1 问题
写代码的时候用到的括号都是成双成对的出现,并且大小也相同。在集成编辑环境中,IDE就会为我们自己动检查括号是否匹配。那么为了避免在报错,如何判断是否有无括号不匹配?
2 方法
利用栈来实现这种功能。当遇见一个左括号,就表示入栈,遇见一个右括号就表示出栈。出栈后的左括号,与刚遇见的右括号进行匹配,如类型相同则匹配成功,反之则报错。
代码清单 1
class SqStack: def __init__(self): self.data = [] def empty(self): if len(self.data) == 0: return True return False def push(self,e): self.data.append(e) def pop(self): assert not self.empty() return self.data.pop() def gettop(self): assert not self.empty() return self.data[-1] stack = SqStack() def isMatch(str): st = SqStack() i = 0 while i <len(str): e = str[i] if e =='(' or e =='[' or e == '{': st.push(e) else: if e == ')': if st.empty() or st.gettop()!='(': return False st.pop() if e == ']': if st.empty() or st.gettop()!='[': return False st.pop() if e == '}': if st.empty() or st.gettop()!='{': return False st.pop() i+=1 return st.empty() str=input('请输入:') if isMatch(str): print('True') else: print('False') |
3 结语
针对用栈来判断括号是否匹配的问题,提出栈的基本用法的方法,通过运用进栈方法、出栈方法、判断栈是否为空方法以及遍历方法实验,证明该方法是有效的,但本文的方法较复杂,内容较多。未来可以在此基础上优化判断是否匹配方法。