当前位置: 首页 > news >正文

[豪の算法奇妙冒险] 代码随想录算法训练营第十天 | 232-用栈实现队列、225-用队列实现栈、20-有效的括号、1047-删除字符串中的所有相邻重复项

代码随想录算法训练营第十天 | 232-用栈实现队列、 225-用队列实现栈、20-有效的括号、1047-删除字符串中的所有相邻重复项


LeetCode232 用栈实现队列

题目链接:https://leetcode.cn/problems/implement-queue-using-stacks/description/

文章讲解:https://programmercarl.com/0232.用栈实现队列.html

视频讲解:https://www.bilibili.com/video/BV1nY4y1w7VC/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 这题要用栈来实现队列的先进先出,但是栈是先进后出的,因此我们可以设置两个栈来模拟队列,一个作为入栈,一个作为出栈

​ 元素一开始放进入栈,要取的时候再从入栈放入出栈,再从出栈拿元素,这样元素就是先进先出

image-20251130171920310

class MyQueue {Stack<Integer> stackIn;Stack<Integer> stackOut;public MyQueue() {stackIn = new Stack<>();stackOut = new Stack<>();}public void push(int x) {stackIn.push(x);}public int pop() {move();return stackOut.pop();}public int peek() {move();return stackOut.peek();}public boolean empty() {return stackIn.isEmpty() && stackOut.isEmpty();}public void move(){if(!stackOut.empty()){return;}while(!stackIn.isEmpty()){stackOut.push(stackIn.pop());}}
}

LeetCode225 用队列实现栈

题目链接:https://leetcode.cn/problems/implement-stack-using-queues/submissions/681722036/

文章讲解:https://programmercarl.com/0225.用队列实现栈.html

视频讲解:https://www.bilibili.com/video/BV1Fd4y1K7sm/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 这里采用一个队列来模拟栈,栈是先进后出,队列是先进先出,当实现栈pop()的时候,要的是队列的队尾元素,所以我们可以将队尾前的元素都出队再入队,这样最前面的那个元素就是之前的队尾元素

image-20251130191441030

class MyStack {Queue<Integer> que;public MyStack() {que = new LinkedList<>();}public void push(int x) {que.offer(x);}public int pop() {move();return que.poll();}public int top() {move();int result = que.poll();que.offer(result);return result;}public boolean empty() {return que.isEmpty();}public void move(){int size = que.size();for(int i = 1; i <= size-1; i++){que.offer(que.poll());}}
}

LeetCode20 有效的括号

题目链接:https://leetcode.cn/problems/valid-parentheses/description/

文章讲解:https://programmercarl.com/0020.有效的括号.html

视频讲解:https://www.bilibili.com/video/BV1AF411w78g/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 括号匹配,很经典的栈应用题,遇到左括号将其放入栈,遇到右括号出栈一个元素进行比对,若匹配则可以继续往下遍历括号串,若不匹配则直接return false

​ 注意pop空栈的问题,以及最后记得检查栈是否为空,若不为空说明还有为匹配的左括号,return false

image-20251130193118828

class Solution {public boolean isValid(String s) {Stack<Character> stack = new Stack<>();if(s.length() % 2 != 0){return false;}for(int i = 0; i < s.length(); i++){char ch = s.charAt(i);if(ch == '(' || ch == '[' || ch == '{'){stack.push(ch);}else{if(stack.isEmpty()){return false;}char top = stack.pop();if((ch == ')' && top == '(')||(ch == ']' && top == '[')||(ch == '}' && top == '{')){continue;}else{return false;}}}return stack.isEmpty();}
}

LeetCode1047 删除字符串中的所有相邻重复项

题目链接:https://leetcode.cn/problems/remove-all-adjacent-duplicates-in-string/description/

文章讲解:https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html

视频讲解:https://www.bilibili.com/video/BV12a411P7mw/?vd_source=b989f2b109eb3b17e8178154a7de7a51

​ 栈记住了遍历数组当前元素的前一个元素,所以这种相邻元素消除的工作很适合用栈来做

​ 核心逻辑是判断栈顶元素和当前元素是否相同,若相同则一起消除,若不相同则将当前元素入栈

image-20251130195139474

class Solution {public String removeDuplicates(String s) {Stack<Character> stack = new Stack<>();int length = s.length();if(length == 1){return s;}for(int i = 0;i < length;i++){char cur = s.charAt(i);if(stack.isEmpty()){stack.push(cur);}else{char top = stack.peek();if(cur != top){stack.push(cur);}else{stack.pop();}}}StringBuilder result = new StringBuilder();while(!stack.isEmpty()){result.append(stack.pop());}return result.reverse().toString();}
}
http://www.gsyq.cn/news/66495.html

相关文章:

  • 完整教程:CSS笔记4:CSS:列表、边框、表格、背景、鼠标与常用长度单位
  • 软件基础第三次作业这个作业属于哪个课程
  • RISC-V Linux QEMU编译安装 qemu-system-riscv64 构建
  • 2025东华大学程序设计萌新挑战赛题解
  • 2025年必备口语练习APP清单:AI助学、真人对练,总有一款适合你
  • 服务器常见操作
  • 成膜助剂出口厂商有哪些?销量比较好的成膜助剂厂家名单权威推荐:资质供应商与外贸公司名录
  • 哪家过碳酸钠供应商质量好?过碳酸钠质量好的厂家推荐:颗粒均匀的过碳酸钠厂家
  • 国内生产过碳酸钠的厂家有哪些?TOP榜来了:过碳酸钠供应商测评:销量高、质量好的欧盟标准品牌
  • macOS 虚拟串口通信技术笔记
  • 百度亮相 SREcon25:搜索稳定背后的秘密,微服务雪崩故障防范 - 指南
  • Attention is all you need论文学习
  • 从数据采集到智能诊断:阿尔泰科技实时高精度远距离管道状态监测全流程 - 教程
  • Spring使用el表达式
  • 《程序员修建之道:从小工到专家》阅读笔记2
  • AipexBase怎么用?AI 原生BaaS平台一句话做后端开发 - 实践
  • wsl基本使用以及使用过程中遇到的问题
  • 基于大数据的全国降水可视化分析预测框架
  • Day7-20251130
  • 记录容器云基于debian镜像的自由组合
  • 详细介绍:Elasticsearch从入门到实践:核心概念到Kibana测试与C++客户端封装
  • 渗透测试中的方法论
  • 医疗小程序02用户注册 - 实践
  • 最全、最清晰、C++的 lower_bound / upper_bound 总结
  • Mysql基础3 - 实践
  • 2025-12-01-Nature 本周最新文献速递
  • DevOps设备链对比,Azure 和 TikLab哪款更好用?
  • Python 日期时间操作笔记
  • The country with the largest area in the world
  • 田径赛场飞驰 球类竞技闪耀