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

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

用栈实现队列

用两个栈来实现队列的先进后出

/** @lc app=leetcode.cn id=232 lang=java** [232] 用栈实现队列*/// @lc code=startimport java.util.Stack;class MyQueue {Stack<Integer> in = new Stack<>();Stack<Integer> out = new Stack<>();public MyQueue() {}public void push(int x) {in.add(x);}public int pop() {while (!in.isEmpty()) {out.add(in.pop());}int result = out.pop();while (!out.isEmpty()) {in.add(out.pop());}return result;}public int peek() {while (!in.isEmpty()) {out.add(in.pop());}int result = out.peek();while (!out.isEmpty()) {in.add(out.pop());}return result;}public boolean empty() {return in.isEmpty();}
}/*** Your MyQueue object will be instantiated and called as such:* MyQueue obj = new MyQueue();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.peek();* boolean param_4 = obj.empty();*/
// @lc code=end

用队列实现栈

学会了通过维护单个队列实现先进先出栈

/** @lc app=leetcode.cn id=225 lang=java** [225] 用队列实现栈*/// @lc code=startimport java.util.LinkedList;
import java.util.Queue;class MyStack {Queue<Integer> queue;public MyStack() {queue = new LinkedList<>();}public void push(int x) {queue.offer(x);for (int i = 0; i < queue.size() - 1; i++) {queue.offer(queue.poll());}}public int pop() {return queue.poll();}public int top() {return queue.peek();}public boolean empty() {return queue.isEmpty();}
}/*** Your MyStack object will be instantiated and called as such:* MyStack obj = new MyStack();* obj.push(x);* int param_2 = obj.pop();* int param_3 = obj.top();* boolean param_4 = obj.empty();*/
// @lc code=end

有效的括号

左边括号压入栈,成对弹出,最后栈为空则为有效括号

/** @lc app=leetcode.cn id=20 lang=java** [20] 有效的括号*/// @lc code=startimport java.util.Stack;class Solution {public boolean isValid(String s) {Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char temp = s.charAt(i);if (temp == '(' || temp == '[' || temp == '{') {stack.push(temp);} else if (temp == ')') {if (stack.isEmpty() || stack.pop() != '(') {return false;}} else if (temp == ']') {if (stack.isEmpty() || stack.pop() != '[') {return false;}} else if (temp == '}') {if (stack.isEmpty() || stack.pop() != '{') {return false;}}}return stack.isEmpty();}
}
// @lc code=end

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

主要还是对Java的字符串工具不熟

/** @lc app=leetcode.cn id=1047 lang=java** [1047] 删除字符串中的所有相邻重复项*/// @lc code=startimport java.util.Stack;class Solution {public String removeDuplicates(String s) {Stack<Character> stack = new Stack<>();for (int i = 0; i < s.length(); i++) {char current = s.charAt(i);if (!stack.isEmpty() && current == stack.peek()) {stack.pop();} else {stack.push(current);}}StringBuilder result = new StringBuilder();for (char c : stack) {result.append(c);}return result.toString();}
}
// @lc code=end
http://www.jsqmd.com/news/473733/

相关文章:

  • OFDM MQAM在衰落信道下误比特率性能仿真探索
  • python语法学习
  • Simulink双三相永磁同步电机控制仿真! 1.矢量控制,包括两种电机建模,VSD模型和双d...
  • STM32单片机开发的空气净化器:原理、设计与源码详解,适合开发人员
  • 探索多机器人协同编队避障算法:从人工势场到动态窗口
  • 从空白文档到合格初稿:Paperzz 毕业论文智能写作,让毕业生告别 “选题 - 文献 - 提纲” 三重焦虑
  • KPCA - ISSA - SVM分类预测:MATLAB实战与模型对比
  • Pyrene-PEG-NH2 氨基功能化芘荧光PEG活细胞成像与示踪探针
  • 产品推荐|40分区光控照明系统
  • 自动化测试中JSONPath 是解析复杂 JSON 响应的核心工具
  • binning模式下和normal模式下相同曝光参数相同场景加权亮度差异消除方案
  • LabVIEW图像处理框架核心结构示意图
  • 搞嵌入式开发的小伙伴应该都遇到过PID调参这个头疼的问题吧?今天咱们直接上干货,聊聊怎么在STM32上玩转PID自整定和温度控制。先扔个核心代码片段镇楼
  • HCSR04超声波测距仿真示例
  • 解决OpenWeatherMap API秘钥激活后仍无法使用
  • 基于STM32的电机控制器:Keil与Proteus的嵌入式之旅
  • 鸿蒙中 应用的权限(一)
  • 心理聊天App 5款产品实测对比,哪个更适合情绪内耗的你?
  • 内存涨价、供应不稳?嵌入式工程师必看:适合轻量级项目ARM选型与存储避坑指南
  • GESP C++一级认证完全指南:考点解析与备考策略
  • SpringBoot3实战集成mzt-biz-log,一行代码搞定业务日志记录
  • 电网电压扰动下相光伏并网逆变器控制的Simulink仿真探索
  • 技术人思维看渠道品牌管理:如何让“多渠道不走样”成为可执行的工程化规则?
  • 基于Matlab的螺丝轮廓识别:数字图像处理流程
  • STM32串口双机模拟汽车电量里程项目:Protues仿真与源码解析
  • 无人零售/五金厂必看!边缘设备Java+YOLOv11推理稳定性全攻略:崩溃率从15%降到0.1%,断点续检1秒恢复
  • ThinkPHP反序列化漏洞深度解析:CacheStore组件为何成为攻击入口?
  • 探索Matlab在两相流动相场法与自适应网格中的应用
  • MATLAB代码:基于多能互补的热电联供型微网优化运行 关键词:多能互补 综合需求响应 热电联...
  • 微电网二次控制:下垂控制与基于数据采样二次控制的奇妙融合