利用栈进行简单的括号匹配
需求:若左括号和右括号个数相等并且逻辑正确则返回true,否则返回false
具体事例代码如下:
#简单括号匹配
#该案例中输入的字符串只有括号,不考虑除了括号以外的字符加入
class Stack:
def __init__(self):
self.items=[]
def isEmpty(self):
return self.items==[]
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[len(self.items)-1]
def size(self):
return len(self.items)
def checkString(symbolString): #定义一个可以调用的函数checkString,传入的参数为需要验证的字符串
s=Stack() #创建一个空栈
balance=True #用来判断左括号和右括号是否匹配
index=0 #因为这个栈是从字符串的第一个元素开始审查,所以让index从0开始
while index<len(symbolString) and balance: #循环:如果当前元素的下标小于字符串长度并且括号匹配
symbol=symbolString[index] #取出当前字符(因为index在后面代码中会有增加,所以这里取一个字符)
if symbol=="(": #如果当前字符为(
s.push(symbol) #把(加入到栈中
else: #如果当前字符不是(
if s.isEmpty(): #那么该字符为),按照逻辑推理,如果没有左括号只有右括号,那么字符串肯定不匹配
balance=False #所以如果栈为空,说明在该元素之前没有(,直接判定括号不匹配,结束循环
else: #如果栈不为空,说明前面有左括号,让栈中元素弹出一个和当前字符抵消
s.pop()
index+=1
if balance and s.isEmpty():#如果消到最后字符匹配并且栈为空的话
return True #返回true
else: #否则代表左右括号不匹配或者没有右括号了但是还有左括号
return False #返回false
print(checkString("((()))"))
print(checkString("())"))