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

news/2024/7/7 14:46:07/文章来源:https://www.cnblogs.com/zhuyishao/p/18284436
232和225题一个思路 一起贴了
 1 class MyQueue {
 2 public:
 3     MyQueue() {
 4         stack<int> in;
 5         stack<int> out;
 6     }
 7     
 8     void push(int x) {
 9         in.push(x);
10     }
11     
12     int pop() {
13         while (!in.empty()) {
14             out.push(in.top());
15             in.pop();
16         }
17         int ans = out.top();
18         out.pop();
19         while (!out.empty()) {
20             in.push(out.top());
21             out.pop();
22         }
23         return ans;
24     }
25     
26     int peek() {
27         while (!in.empty()) {
28             out.push(in.top());
29             in.pop();
30         }
31         int ans = out.top();
32         while (!out.empty()) {
33             in.push(out.top());
34             out.pop();
35         }
36         return ans;
37     }
38     
39     bool empty() {
40         if (in.empty()) {
41             return true;
42         }
43         return false;
44     }
45 private:
46     stack<int> in;
47     stack<int> out;
48 
49 };
 1 class MyStack {
 2 public:
 3     MyStack() {
 4         
 5     }
 6     
 7     void push(int x) {
 8         // 先将 x 入队到 queue2 中
 9         q2.push(x);
10         
11         // 将 queue1 中的所有元素依次转移到 queue2 中,确保 queue2 中的元素顺序是栈顺序
12         while (!q1.empty()) {
13             q2.push(q1.front());
14             q1.pop();
15         }
16         
17         // 交换 queue1 和 queue2,使得 queue1 始终是主要存储栈元素的队列
18         std::swap(q1, q2);
19     }
20     
21     int pop() {
22         // 直接从 queue1 中弹出栈顶元素
23         int top_elem = q1.front();
24         q1.pop();
25         return top_elem;
26     }
27     
28     int top() {
29         // 返回 queue1 的队首元素,即栈顶元素
30         return q1.front();
31     }
32     
33     bool empty() {
34         // 判断 queue1 是否为空
35         return q1.empty();
36     }
37 
38 private:
39     std::queue<int> q1;
40     std::queue<int> q2;
41 };

20题就是简单的符号匹配

 1 class Solution {
 2 private:
 3     vector<char>Stack;
 4 public:
 5     bool isValid(string s) {
 6         for(int i=0;i<s.size();i++){
 7             if(s[i]=='('){
 8                 Stack.push_back('(');
 9             }
10             else if(s[i]==')'){
11                 if(Stack.empty()){
12                     return false;
13                 }
14                 if(Stack.back()!='('){
15                     return false;
16                 }
17                 Stack.pop_back();
18             }
19             else if(s[i]=='['){
20                 Stack.push_back('[');
21             }
22             else if(s[i]==']'){
23                 if(Stack.empty()){
24                     return false;
25                 }
26                 if(Stack.back()!='['){
27                     return false;
28                 }
29                 Stack.pop_back();
30             }
31             else if(s[i]=='{'){
32                 Stack.push_back('{');
33             }
34             else if(s[i]=='}'){
35                 if(Stack.empty()){
36                     return false;
37                 }
38                 if(Stack.back()!='{'){
39                     return false;
40                 }
41                 Stack.pop_back();
42             }
43         }
44         if(Stack.size()!=0){
45             return false;
46         }
47         return true;
48     }
49 };

1047题倒是有点意思 但是我想多了 额外做了一个去重的操作 太呆了 其实也就是变种的符号匹配

 1 // //变种的符号匹配
 2 // class Solution {
 3 // public:
 4 //     string removeDuplicates(string s) {
 5 //         // 定义两个栈 tmp1 和 tmp2
 6 //         stack<char> tmp1;
 7 //         stack<char> tmp2;
 8 //         int len = s.size(); // 获取字符串 s 的长度
 9 //         int i = 0; // 初始化索引 i
10 //         bool flag; // 定义一个标志位用于控制内层循环
11 
12 //         // 外层循环遍历字符串 s
13 //         while (i < len) {
14 //             // 如果 tmp1 不为空且当前字符 s[i] 与 tmp1 的栈顶元素相同
15 //             if (!tmp1.empty() && s[i] == tmp1.top()) {
16 //                 tmp1.pop(); // 弹出 tmp1 的栈顶元素
17 //                 i++; // 继续处理下一个字符
18 //                 flag = true; // 将标志位设置为 true
19 
20 //                 // 内层循环处理 tmp1 中相邻且相同的元素
21 //                 while (flag && !tmp1.empty()) {
22 //                     tmp2.push(tmp1.top()); // 将 tmp1 的栈顶元素推入 tmp2
23 //                     tmp1.pop(); // 弹出 tmp1 的栈顶元素
24 
25 //                     // 如果 tmp2 的栈顶元素和 tmp1 的新栈顶元素相同
26 //                     if (!tmp1.empty() && tmp2.top() == tmp1.top()) {
27 //                         tmp1.pop(); // 弹出 tmp1 的栈顶元素
28 //                         tmp2.pop(); // 弹出 tmp2 的栈顶元素
29 //                         flag = true; // 继续检查下一个元素
30 //                     } else {
31 //                         // 如果不相同,则将 tmp2 的栈顶元素重新推回 tmp1
32 //                         tmp1.push(tmp2.top());
33 //                         tmp2.pop();
34 //                         flag = false; // 结束内层循环
35 //                     }
36 //                 }
37 //             }
38 //             // 如果 tmp1 为空或者当前字符 s[i] 与 tmp1 的栈顶元素不同
39 //             else if (tmp1.empty() || s[i] != tmp1.top()) {
40 //                 tmp1.push(s[i]); // 将当前字符推入 tmp1
41 //                 i++; // 继续处理下一个字符
42 //             }
43 //         }
44 
45 //         // 将 tmp1 中的所有元素依次弹出,压入 tmp2,逆转顺序
46 //         while (!tmp1.empty()) {
47 //             tmp2.push(tmp1.top());
48 //             tmp1.pop();
49 //         }
50 
51 //         // 构建结果字符串
52 //         string result;
53 //         while (!tmp2.empty()) {
54 //             result += tmp2.top(); // 将 tmp2 的栈顶元素添加到结果字符串
55 //             tmp2.pop();
56 //         }
57 
58 //         // 返回最终的结果字符串
59 //         return result;
60 //     }
61 // };
62 class Solution {
63 public:
64     string removeDuplicates(string s) {
65         stack<char> tmp; // 定义一个栈 tmp
66         
67         for (char c : s) { // 遍历字符串 s
68             if (!tmp.empty() && tmp.top() == c) {
69                 tmp.pop(); // 如果当前字符与栈顶元素相等,则弹出栈顶元素
70             } else {
71                 tmp.push(c); // 否则将当前字符压入栈中
72             }
73         }
74         
75         // 构建结果字符串
76         string result;
77         while (!tmp.empty()) {
78             result += tmp.top(); // 将栈顶元素添加到结果字符串
79             tmp.pop(); // 弹出栈顶元素
80         }
81         
82         // 因为栈是先进后出,所以需要反转字符串
83         reverse(result.begin(), result.end());
84         
85         return result; // 返回最终的结果字符串
86     }
87 };

 

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

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

相关文章

CentOS8部署zerotier异地组网

本文介绍了在CentOS 8系统上部署ZeroTier以实现异地组网的方法,包括安装、配置、加入网络、开启IP转发和设置路由表等步骤,并提出进一步实现公网无缝组网的展望。CentOS8部署zerotier异地组网 CentOS8部署zerotier异地组网 一、前言 本文在此前研究部署FRP进行内网穿透,但FR…

《DNK210使用指南 -CanMV版 V1.0》第九章 打印输出实验

第九章 打印输出实验 1)实验平台:正点原子DNK210开发板 2)章节摘自【正点原子】DNK210使用指南 - CanMV版 V1.0 3)购买链接:https://detail.tmall.com/item.htm?&id=782801398750 4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/k210/ATK-DN…

分享一款可编辑本地电脑文件的在线编辑器

之前见过在线版的VSCode,被惊讶到了。网页上竟然可以编辑电脑本地的文件,打破了网页无法编辑本地电脑文件的限制。一直好奇怎么做的。抽空研究了一下,然后发现其实也不难。背景 之前见过在线版的VSCode,被惊讶到了。网页上竟然可以编辑电脑本地的文件,打破了网页无法编辑本…

xhcms

xhcms 目录结构 admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 templ…

lrzsz安装完成后rz乱码

rz选择文件夹后乱码传输不到linux里面, 这时候只需要rz -be再选择文件 这样就可以进行后续的解压了tar -zxvf jdk-8u65-linux-x64.tar.gz

椭流线法设计配光器

本文介绍了利用椭流线法设计高效均匀的LED配光器,通过对边光原理、反射定律及椭圆几何特性的深入分析,结合Matlab和SolidWorks软件实现光学仿真,最终成功设计出接收效率高、均匀度优的配光器。椭流线法设计配光器 椭流线法设计配光器 一、设计原理 1、边光原理 边光原理是非…

wx云开发增删改查

首先是.wxml文件,此处为固定数据的新增<button type="primary" bind:tap="addData"> //调用.js中addData方法插入数据 </button>对应.js文件//添加数据addData(){wx.showLoading({ //showLoading(api接口)(防止用户多次…

剪裁法设计配光器

剪裁法设计配光器通过光源角分割和目标面分割,利用边光原理和反射定律,计算并构建光学母线,以实现高均匀度和高光效的均匀圆斑光学设计。剪裁法设计配光器 剪裁法设计配光器 一、设计原理边光原理 边光原理是非成像光学中的一个基础原理,其内容可以表述为:来自光源边缘的光…

iOS-列表视图

在iOS开发中,UITableView和UICollectionView是两个非常核心的用于展示集合数据的UI组件。它们都能以列表的形式展示数据,但各自的特点和使用场景有所不同。 UITableView UITableView用于展示和管理垂直滚动的单列数据列表。它是以行的形式展示数据,每行(cell)可以展示相同…

CPC配光系统设计

本文详细介绍了CPC(复合抛物线聚光器)配光系统的设计过程,包括设计原理、抛物流线几何特性及其设计要求和流程,并通过Matlab和SolidWorks绘制模型,最后在TracePro中进行仿真验证,确保系统满足均匀照度和高效接收率的目标。CPC配光系统设计 CPC配光系统设计 一、设计原理 …

VMware vSphere Tanzu部署_14_部署容器应用

1.部署运行容器应用 1.1. 登录tkc集群 jianhua@napp:~/tkc$ kubectl vsphere login --server=192.168.203.194 \ --tanzu-kubernetes-cluster-name tkc-dev-cluster \ --tanzu-kubernetes-cluster-namespace tkc-01 \ --vsphere-username administrator@vsphere.local \ --ins…

贝塞尔曲线原理、推导及Matlab实现

本文详细解析了贝塞尔曲线的定义、性质、构建方法以及多种阶数的推导公式,并提供了完整的Matlab代码用于绘制和计算贝塞尔曲线。贝塞尔曲线原理、推导及Matlab实现 贝塞尔曲线原理、推导及Matlab实现 一、简介 贝塞尔曲线提出 在数学的数值分析领域中,贝塞尔曲线(English:B…

刘积仁的大健康“长跑”

软件是一个长命的产业,但软件企业的寿命都很短。懂得怕死,才能有机会活得长久。 这一次,刘积仁又为东软医疗找到了强大助力!中国通用技术(集团)控股有限责任公司(以下简称通用技术集团)所属资本公司战略投资东软集团在医疗健康领域资的创新业务公司——东软医疗,双方也由…

【AppStore】一文让你学会IOS应用上架Appstore

咱们国内现在手机分为两类,Android手机与苹果手机,现在用的各类APP,为了手机的使用安全,避免下载到病毒软件,官方都极力推荐使用手机自带的应用商城进行下载,但是国内Android手机品类众多,手机商城各式各样,做不到统一,所以Android的APP上架得一个一个平台去申请上架,…

关于airtest生成的报告中缺少poco语句问题

1、airtest生成的报告只显示airtest的相关操作,如果是poco和airtest-selenium的操作则不记录。因此需要在报告中引用插件。支持poco语句插件,poco.utils.airtest.report 支持airtest-selenium语句插件,airtest_selenium.report2、在IDE运行 .py 脚本报告生成的依据是脚本运行…

xshell7的下载ssh远程连接

1.下载地址家庭/学校免费 - NetSarang Website (xshell.com) 2.下载后一路next,来到主页面,我们来连接一下试一试吧,这里主机就是ifconfig得到的 3.用户名一般都是root密码是自己设置的那个 4.连接的时候注意比如我要连接Node1那么node1就要保持开启并却防火墙已经关闭 5.看一…

xhcms1.0

xhcms1.0 目录结构 admin --管理后台文件夹 css --存放css的文件夹 files --存放页面的文件夹 images --存放图片的文件夹 inc --存放网站配置文件的文件夹 install --网站进行安装的文件夹 seacmseditor --编辑器文件夹 te…

关于巴图自动化Profinet协议转Modbus协议网关模块怎么配置IP地址教学

Profinet协议和Modbus协议是工业通讯常用协议,通过巴图自动化PN转Modbus网关模块(BT-MDPN10)实现连接。常见的协议有:ModbusTCP协议,Profibus协议,Profibus DP协议,EtherCAT协议,EtherNET协议,CAN,CANOPEN等Profinet协议和Modbus协议是工业领域中常用的两种通讯协议,…

基础篇:Stable Diffusion 基础原理详述

【基础篇】Stable Diffusion 基础原理详述前言我认为学习 ComfyUI 应该先从理论学起。与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同。首先,许多设置和操作在 AI 绘图工具中是非可视化的,这意味着即使你更改了某个配置,界面上也未必会有任何变化,…