题目描述
给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串 s
,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 每个右括号都有一个对应的相同类型的左括号。
示例1:
输入:s = "()"
输出:true
示例2:
输入:s = "()[]{}"
输出:true
示例3:
输入:s = "(]"
输出:false
代码
import Stack
def parChecker(symbolString):
s = Stack.Stack()
balance = True
index = 0
while index < len(symbolString) and balance:
symbol = symbolString[index]
# 如果是左括号就入栈
if symbol in "([{":
s.push(symbol)
# 如果是右括号,首先判断栈是否为空,如空则报错,如不空则判断括号是否匹配
else:
if s.isEmpty():
balance = False
else:
top = s.pop()
if not matches(top, symbol):
balance = False
index += 1
if balance and s.isEmpty():
return True
else:
return False
def matches(open, close):
opens = "([{"
closes = ")]}"
return opens.index(open) == closes.index(close)
import Stack
— 导入的是定义的栈。该数据结构的特点是先进后出。代码如下:
class Stack:
'''
将列表的尾部定义为栈的顶端
'''
def __init__(self):
self.item = []
# 判断是否为空栈
def isEmpty(self):
return self.item == []
# 将元素item添加到栈的顶端
def push(self, item):
self.item.append(item)
# 将栈顶端的元素移除,会返回顶端的元素
def pop(self):
return self.item.pop()
# 返回栈顶端的元素,但并不移除该元素
def peek(self):
return self.item[len(self.item) - 1]
# 返回栈中元素的个数
def size(self):
return len(self.item)