栈
栈的特性
栈的基本结构
我们可以把栈想象成一个装有弹珠的瓶子,先放进去的弹珠在瓶子底部,每次只能将顶部的弹珠倒出。

栈的特点
由图可以很好的知道后进先出
栈的实际应用
简单栈
栈的概念非常简单,但把这个数据结构运用得当是需要充分理解的。
应用1:判断字符串是否合法
特殊情况:如果只有一种字符需要配对,我们只需要记录当前需要配对字符的个数,遍历完这个字符串,如果个数为0,说明字符串合法。
具体可以进 cnt 记录当前需要配对字符的个数,初始化为 0,如果遇到左字符 +1,遇到右字符 -1。
如果有多种字符需要配对,这时候用栈就比较合适,因为配对的内容并不一致,栈比较适合配对和消除。
Python 代码:
class Stack:
def __init__(self):
self.stack = []
def push(self, item):
self.stack.append(item)
def pop(self):
if not self.is_empty():
return self.stack.pop()
else:
return ''
def is_empty(self):
return len(self.stack) == 0
class Solution(object):
def isValid(self, s):
"""
:type s: str
:rtype: bool
"""
stack = Stack()
mapping = {')': '(', ']': '[', '}': '{'}
for char in s:
if char in mapping:
if stack.is_empty() or stack.pop() != mapping[char]:
return False
else:
stack.push(char)
return stack.is_empty()
单调栈
LeetCode 739
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。
Python 代码:
class Solution(object):
def dailyTemperatures(self, temperatures):
"""
:type temperatures: List[int]
:rtype: List[int]
"""
stack = Stack()
res = len(temperatures) * [0]
for t in range(len(temperatures)):
while (not stack.is_empty()) and temperatures[t] > temperatures[stack.peek()]:
index = stack.peek()
res[index] = t - index
stack.pop()
stack.push(t)
return res
浙公网安备 33010602011771号