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

【代码随想录|232.用栈实现队列、225.用队列实现栈、20.有效的括号、1047.删除字符串中的所有相邻重复项】

232.用栈实现队列

timutimtit232. 用栈实现队列 - 力扣(LeetCode)

class MyQueue {
public:stack<int> Sin;stack<int> Sout;MyQueue() {}void push(int x) {Sin.push(x);}int pop() {if (Sout.empty()) { // 出栈为空就把入栈的数导出来while (!Sin.empty()) { // 直到入栈为空Sout.push(Sin.top());Sin.pop();}}int res = Sout.top();Sout.pop();return res;}int peek() {int res = this->pop(); // 这里是自己的指针调用pop函数,所以用->Sout.push(res);return res;}bool empty() {return Sin.empty() && Sout.empty();}
};/*** 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();* bool param_4 = obj->empty();*/

225.用队列实现栈

题目链接:225. 用队列实现栈 - 力扣(LeetCode)

class MyStack { // 用一个栈实现
public:queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {int size = que.size() - 1; // 只留队列中最后一个元素进行返回while (size--) {que.push(que.front());que.pop();}int result = que.front();que.pop();return result;}int top() {int res = this->pop();que.push(res);return res;}bool empty() {return que.empty();}
};
class MyStack { // 用两个栈实现
public:queue<int> que1;queue<int> que2;MyStack() {}void push(int x) {que1.push(x);}int pop() {int size = que1.size();size--;while (size--) {que2.push(que1.front());que1.pop();}int result = que1.front();que1.pop();que1=que2;while (!que2.empty()) {que2.pop();}return result;}int top() {int result = this->pop(); // 功能复用que1.push(result);return result;}bool empty() {return que1.empty();//第二个队列总为空,检查第一个队列就行}
};

20.有效的括号

20. 有效的括号 - 力扣(LeetCode)

class Solution {
public:bool isValid(string s) {stack<int> st;if (s.size() % 2 != 0)return false;for (int i = 0; i < s.size(); i++) {if (s[i] == '(')st.push(')');else if (s[i] == '[')st.push(']');else if (s[i] == '{')st.push('}');else if (st.empty() || st.top() != s[i])return false;elsest.pop();}return st.empty(); // 不是直接return true,完全匹配完才return true}
};

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

题目链接:1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)

class Solution { // 用栈来实现
public:string removeDuplicates(string S) {stack<int> st;for (char s:S) {if(st.empty() || s != st.top()) {st.push(s);}else{st.pop();}}string result = "";while (!st.empty()) {result += st.top();st.pop();}reverse(result.begin(), result.end());return result;}
};
class Solution { // 用字符串当栈来用
public:string removeDuplicates(string S) {string result;for (char s:S) {if(result.empty() || s != result.back()) {result.push_back(s);}else{result.pop_back();}}return result;}
};

http://www.dtcms.com/a/322926.html

相关文章:

  • 第05章 排序与分页
  • 模板方法模式:优雅封装算法骨架
  • Python-UV-portry项目管理流程
  • redis8.0.3部署于mac
  • C++ 中的智能指针
  • Python 继承和多态
  • ElaWidgetTools qt5+vs2019编译
  • 1.JavaScript 介绍
  • 基于STM32的智能电表设计与实现
  • 计算机组成原理2-4-1:浮点数的表示
  • Linux 安装 JDK 8u291 教程(jdk-8u291-linux-x64.tar.gz 解压配置详细步骤)​
  • 【c++】探秘Loop机制:C++中优雅的双向数据交互模式
  • 低速CAN 高速CAN是否兼容?
  • 功能测试详解
  • 【面试题】cookie和session 的区别
  • Ubuntu下Nginx的部署后端项目(Java为例),配置Nginx代理
  • 自编教材实操课程学习笔记
  • 商品、股指及ETF期权五档盘口Tick级与分钟级历史行情数据多维解析
  • dify离线插件安装
  • Spring Boot Starter 自动化配置原理深度剖析
  • 【工具变量】地市人力资本水平数据集(2003-2023年)
  • 聊聊经常用的微服务
  • Java 枚举解析:从基础到进阶的知识点与注意事项
  • 【完整源码+数据集+部署教程】植物生长阶段检测系统源码和数据集:改进yolo11-rmt
  • gRPC for C++ 实战全流程 —— 从零搭建到同步/异步服务
  • vw和vh:CSS中的视口相对单位
  • Linux下管道的实现
  • 第十四节 代理模式
  • Android 设置/修改系统NTP服务地址
  • 2010-2024 地级市、上市公司“信息惠民国家试点城市”DID