DAY10 - 232.用栈实现队列, 225. 用队列实现栈, 20. 有效的括号, 1047. 删除字符串中的所有相邻重复项

news/2025/3/28 9:17:45/文章来源:https://www.cnblogs.com/chloechen/p/18791186

由于栈(队列)底层容器是可插拔的(也就是说我们可以控制使用哪种容器来实现栈的功能),所以STL中栈往往不被归类为容器,而被归类为container adapter(容器适配器)

C++ STL stack

  • push():将元素压入栈顶。
  • pop():将栈顶元素弹出。
  • top():访问栈顶元素。
  • empty():检查栈是否为空。
  • size():返回栈中元素的数量。

C++ STL queue

  • push():将元素加入队列的尾部。
  • pop():将队列的头部元素移除。
  • front():访问队列头部元素。
  • back():访问队列尾部元素。
  • empty():检查队列是否为空。
  • size():返回队列中元素的数量。

232.用栈实现队列

知道两个栈尾尾相接就可以实现队列了,但实现起来还是卡了一下。

class MyQueue {
public:stack<int> fronts;stack<int> tails;MyQueue() {}void push(int x) {tails.push(x);}int pop() {if(fronts.empty()){ //注意这里是fronts为空才可以操作,否则顺序就乱了while(!tails.empty()){fronts.push(tails.top());tails.pop();}}int res=fronts.top();fronts.pop();return res;}int peek() {if(fronts.empty()){while(!tails.empty()){fronts.push(tails.top());tails.pop();}}return fronts.top();}bool empty() {return fronts.empty()&&tails.empty();}
};

225. 用队列实现栈

队列FIFO,所以即使出队列再入队列顺序也不会改变。而两个栈先弹出再放入顺序就会反转。

class MyStack {
public:queue<int> que;MyStack() {}void push(int x) {que.push(x);}int pop() {int size = que.size();size--;while (size--) {que.push(que.front());que.pop();}int result = que.front();que.pop();return result;}int top(){int size = que.size();size--;while (size--){que.push(que.front());que.pop();}int result = que.front(); que.push(que.front());  que.pop();return result;}bool empty() {return que.empty();}
};

20. 有效的括号

一开始面试写了这个题,用的vector没有用stack,换成stack来写一遍

class Solution {
public:bool isValid(string s) {stack<char> st;int len=s.size();for(char c:s){if(c=='('||c=='['||c=='{'){st.push(c);}else if(c==')'){if(!st.empty()&&st.top()=='(') st.pop();else return false;}else if(c==']'){if(!st.empty()&&st.top()=='[') st.pop();else return false;}else if(c=='}'){if(!st.empty()&&st.top()=='{') st.pop();else return false;}}if(!st.empty()) return false;return true;}
};

但是这样写if else太多了,很不美观,看下标准答案:

class Solution {
public:bool isValid(string s) {if (s.size() % 2 != 0) return false; // 如果s的长度为奇数,一定不符合要求stack<char> st;for (char c:s) {if (c == '(') st.push(')');else if (c == '{') st.push('}');else if (c == '[') st.push(']'); //让左括号入栈//如果在过程中st空了则也是错误else if (st.empty() || st.top() != c) return false;else st.pop();}return st.empty();}
};

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

和括号匹配一样,不过是将栈中剩余的内容再输出而已。还要注意的一个小点是由于栈是FIFO,所以最后res字符串要reverse一下。

class Solution {
public:string removeDuplicates(string s) {stack<char> st;for(char c:s){if(!st.empty()&&c==st.top()) st.pop();else st.push(c);}string res="";while(!st.empty()){res+=st.top();st.pop();}reverse(res.begin(),res.end());return res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/905422.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek 官方推出的实用集成工具百宝箱,建议收藏!

项目介绍 该实用集成工具百宝箱汇聚了DeepSeek官方精心挑选和推荐的各类集成工具(其中包括:应用程序、AI Agent 框架、AI数据应用框架、RAG 框架、浏览器插件、VS Code 插件等),旨在帮助用户轻松实现DeepSeek功能的扩展与应用。无论你是AI开发者、数据分析师还是普通用户,…

律所管理太费劲?用对系统,让你的律所越做越大!

做律所管理,光会打官司不够,你得是个“ 全能型选手 ”。 不仅要懂法律,还得会 经营、管理、营销、服务 。否则,客户难找、团队不好带、案子越来越乱,日子也越来越难过。 那具体需要哪些能力呢?这 六大能力 ,每一项都很重要,但要靠人工管理,效率太低,容易出错。这时候…

20244221李留斌《python程序设计》实验一报高

20244104 2024-2025-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级:2442 姓名:李留斌 学号:20244221 实验教师:王志强 实验日期:2025年3月23日 必修/选修: 公选课 一、实验内容 1.熟悉Python开发环境; 2.练习Python运行、调试技能; 3.编写程序,练习…

Pydantic异步校验器深:构建高并发验证系统

title: Pydantic异步校验器深:构建高并发验证系统 date: 2025/3/25 updated: 2025/3/25 author: cmdragon excerpt: Pydantic异步校验器基于async/await实现非阻塞验证,支持DNS查询等网络操作。高并发场景下运用批量API验证与异步数据库查询,通过asyncio.gather提升吞吐效…

《电子营业执照》的下载及使用

【电子营业执照的下载及使用】可以直接点此进行学习,也可以看下面我自己写的 一、电子营业执照的下载 (1)打开法人的手机微信,在微信中搜索“电子营业执照小程序”(2)点击“下载执照”(3)输入身份信息(4)人脸识别(5)选择登记地“甘肃”(6)下载执照二、电子营业执…

3月24日练习

第五题:最优配餐 考点:多源bfs 当权重(每条边开销为1)的最短路问题可以用bfs 做法:将每个分店先入队,然后依次对每个分店向前后左右走,只要能到达客户那里那么当前饭店就是距离客户最近的饭店,满足了这个客户以后要对这个用户标注不重复遍历。 算法思想:#include<b…

lc 315. 计算右侧小于当前元素的个数

```C typedef struct Node {int num; // 值int index; // 原数组索引int size; // 逆序对数量 } Node;class Solution { public:void mergeSort(vector<Node> &arr, int left, int right) {if (left >= right) return;int mid = (left + right) >> 1;…

windows 修改chrome默认安装目录

现在最新版的 Chrom 在安装时仍然不允许用户选择安装路径, 32 位版本会安装到 C:\Program Files (x86)\Google\Chrome 目录,64 位版本会安装到 C:\Program Files\Google\Chrome 目录,而其用户数据目录仍然被设置在当前用户目录下 C:\Users\%USERPROFILE%\AppData\Local\Goog…

Android 8.0系统的通知栏适配

为什么要进行通知栏适配? 现在经常是早上一觉醒来拿起手机一看,通知栏上全是各种APP的推送,烦。随着智能手机发展的成熟,通知栏搞得越来越不讨人喜欢了。各个App都希望抢占通知栏的空间,来尽可能地销售自己的产品。 通知栏是Android系统原创的,虽说乔布斯一直认为Android…

日事清25年战略目标如何高效执行?企业组织架构优化与项目管理全流程解析

如何使用日事清搭建一份可实现的25年战略目标-执行体系?在这个快节奏的商业世界里,每个企业都需要弄清楚几个超重要的问题: 首先,你的企业使命和抱负够不够清晰 ——能不能让每一个员工充满归属感和使命感? 然后,你们团队有没有一个明确的目标体系?还是只是在“摸着石头…

Obsidian 笔记一键转换发布为 Jekyll 博客

Obsidian 是一款功能强大且灵活的知识管理和笔记软件,与 Jekyll 这一轻量级静态博客框架的结合,既能保留 Obsidian 的网状知识关联优势,又能借助 Jekyll 的高效编译能力快速生成标准化博文。 Obsidian 笔记自动转换为 Jekyll 博客一文介绍了如何把挑选出的 Obsidian 笔记转换…

变更《营业执照》操作流程

第一步:打开甘肃政务服务网 https://zwfw.gansu.gov.cn/ 第二步:登录 (1)右上角(2)点“法人登录”(3)点“电子营业执照登录”第三步:使用【电子营业执照】的【扫一扫】进行登录 (1)打开法人的手机微信,在微信中搜索“电子营业执照小程序”(2)点击“扫一扫”(3)…