栈练习——有效的括号
栈
栈是一种线性表,它仅允许从栈顶输入元素和输出元素。输入过程也叫做入栈、压栈,输出过程也叫做出栈、退栈。
在python中,栈是由列表定义的,具体代码如下所示
class Stsck()
def __init__(self):
self.stack = []
#定义入栈函数
def push(self, data):
self.stack.append(data)
#定义出栈函数,首先判断栈是否已空
def out(self):
if self.is_empty():
print('Stack is empty.')
else:
self.stack.pop()
#定义判断是否为空栈函数
def is_empty(self):
if len(self.stack) == 0:
return True
else:
return False
Leetcode有效的括号
问题描述:
给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
(1)左括号必须用相同类型的右括号闭合。
(2)左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例:
输入:“( )”
输出:true
输入:“{ [ ] ( } )"
输出:false
思考:
可以定义一个栈,将字符串逐个输入到栈中,每次输入一个字符就判断它是否与上一个字符构成一个有效的括号结构。如果构成有效的括号结构,那么就将这组括号退栈。如果最后栈中仍然有字符,那么这组字符串构成无效括号结构,反之,则字符串构成有效括号结构。
解决方法:
class Solution:
def isValid(self, s: str) -> bool:
stack = []
stack.append('start')
position = 0
for symbel in s:
stack.append(symbel)
position = position + 1
if stack[position - 1] == '(' and stack[position] == ')':
stack.pop()
stack.pop()
position = position - 2
if stack[position - 1] == '[' and stack[position] == ']':
stack.pop()
stack.pop()
position = position - 2
if stack[position - 1] == '{' and stack[position] == '}':
stack.pop()
stack.pop()
position = position - 2
if len(stack) == 1:
return True
else:
return False