20. 有效的括号
讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。
大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。
题目链接/文章讲解/视频讲解:代码随想录
解题代码
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
#第一种情况:遍历完,但是stack还剩下未匹配的右括号,说明左括号多了
#第二种情况:遍历时发现,在s中的右和在stack里面的第一个右不匹配,左右不match
#第三种情况:还没遍历完,发现stack里面已经空了,说明右括号多了
# 创建一个stack用于存放右边的括号
stack = []
# 初筛一下,如果有奇数个括号,则一定不匹配,可以直接false
if len(s) % 2 != 0:
return False
# 开始遍历s,遇到左,就放右
for char in s:
if char == '(':
stack.append(')')
elif char == '{':
stack.append('}')
elif char == '[':
stack.append(']')
# 遍历时如果遇到右,可以check了
elif not stack or char != stack.pop(): #(检查第三种&二种情况)
return False
# 最后检查stack是否为空(检查第一种情况)
return True if not stack else False
1047. 删除字符串中的所有相邻重复项
栈的经典应用。 要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了,遍历数组当前元素时候,前一个元素是什么。
题目链接/文章讲解/视频讲解:代码随想录
解题代码
class Solution(object):
def removeDuplicates(self, s):
"""
:type s: str
:rtype: str
"""
stack = []
for char in s:
if stack and stack[-1] == char:
stack.pop()
else:
stack.append(char)
return ''.join(stack)