Python实现栈
栈的抽象数据结构
**·**栈是有序的LIFO(后进先出)
**·**栈的操作有
- Stack() 创建新的空栈。
- push(item) 添加新项到栈顶部。
- pop() 删除栈顶项并返回栈顶项的值。栈被修改。
- peek() 返回栈顶部项。不修改栈。
- isEmpty() 测试栈是否为空,返回 Bool 值。
- size() 返回栈长度(栈中 item 数量)。
利用列表实现栈
class Stack:
def __init__(self):
self.items = []
def isEmpty(self) -> bool:
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
if self.isEmpty()!=True:
return self.items.pop()
def peek(self):
if self.isEmpty() != True:
return self.items[-1] # 返回最后一个
def size(self):
return len(self.items)
简单括号匹配问题:
遇到左括号如'{[('就存入栈中,当遇到第一个右括号如‘}])’,就检查栈顶元素是否与之匹配,若匹配则弹出,然后继续重复上述步骤,若不匹配则直接返回false。
代码一:
class Solution:
class Stack:
def __init__(self):
self.items = []
def isEmpty(self) -> bool:
return self.items == []
def push(self, item):
self.items.append(item)
def pop(self):
if self.isEmpty()!=True:
return self.items.pop()
def peek(self):
if self.isEmpty() != True:
return self.items[-1] # 返回最后一个
def size(self):
return len(self.items)
def isValid(self, s: str) -> bool:
stack = self.Stack()
for str in s:
if str in '[{(':
stack.push(str)
elif str == ']' and stack.peek() == '[':
stack.pop()
elif str == '}' and stack.peek() == '{':
stack.pop()
elif str == ')' and stack.peek() == '(':
stack.pop()
else:
return False
return stack.isEmpty()
# 测试
if __name__ == '__main__': # test
s = Solution()
print(s.isValid("()"))
print(s.isValid("()[]{}"))
print(s.isValid("(]"))
print(s.isValid("([)]"))
print(s.isValid("{[]}"))
代码二:
字典的方法:
class Solution:
def isValid(self, s: str) -> bool:
dic = {'{': '}', '[': ']', '(': ')', '?': '?'}
stack = ['?']
for c in s:
if c in dic: stack.append(c)
elif dic[stack.pop()] != c: return False
return len(stack) == 1