2025.09.05 用队列实现栈 有效的括号 删除字符串中的所有相邻重复项
225. 用队列实现栈 - 力扣(LeetCode)
关键在于入栈,q1作为存储队列,q2作为压栈操作队列,先将元素压入q2,再按顺序将q1的元素转移到q2,同时交换q1,q2 的引用。
class MyStack:def __init__(self):self.q1 = deque()self.q2 = deque()def push(self, x: int) -> None:self.q2.append(x)while self.q1 :self.q2.append(self.q1.popleft())self.q1, self.q2 = self.q2, self.q1def pop(self) -> int:return self.q1.popleft()def top(self) -> int:return self.q1[0]def empty(self) -> bool:return len(self.q1) == 0# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()
deque和queue的区别:
1. queue是多线程安全的,deque不是
2. queue的效率比较慢,操作只能是先进先出
3. deque在单线程中效率高,有多样的操作(在两端进行添加(append()
、appendleft()
) 和删除 (pop()
、popleft()
) 操作时,时间复杂度为 O(1))
20. 有效的括号 - 力扣(LeetCode)
用栈的方式判断括号是否合法。
class Solution:def isValid(self, s: str) -> bool:stack = []for x in s:if x == '(' or x == '[' or x == '{':stack.append(x)else:if len(stack) == 0:return Falsetemp = stack.pop()if x == ')' and temp != '(':return Falseif x == ']' and temp != '[':return Falseif x == '}' and temp != '{':return False if not len(stack) == 0:return Falsereturn True
1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
class Solution:def removeDuplicates(self, s: str) -> str:stack = []for char in s :if len(stack) == 0:stack.append(char)continuetop_char = stack[-1]if top_char == char:stack.pop()else:stack.append(char)return ''.join(stack)