算法笔记(九)——栈
文章目录
- 删除字符串中的所有相邻重复项
- 比较含退格的字符串
- 基本计算机II
- 字符串解码
- 验证栈序列
栈是一种
先进后出的数据结构,其操作主要有
进栈、压栈(Push)
出栈(Pop)
常见的使用栈的算法题
- 中缀转后缀
- 逆波兰表达式求值
- 括号匹配
- 深度优先搜索
删除字符串中的所有相邻重复项
题目:删除字符串中的所有相邻重复项

思路
- 用栈的思想来模拟
- 遍历字符串,如果栈为空或栈顶元素和进栈元素不相同,字符进栈
- 否则,即栈顶元素和进栈元素相同,则
pop栈顶元素 - 但是,最后留在栈中的字符就是需要返回的,并且是逆序的,所以我们直接用原来的字符串模拟栈
C++代码
class Solution
{
public:string removeDuplicates(string s) {string res;for(auto ch : s){if(res.size() && res.back() == ch) res.pop_back();else res.push_back(ch);}return res;}
};
比较含退格的字符串
题目:比较含退格的字符串

思路
- 利用栈的思想,封装一个
check函数来返回退格后的字符串 chech函数的实现:- 遍历字符串,如果不是
#,直接加到res上;否则,如果res中没有元素,但是遇到了#,直接跳过不用pop_back()
C++代码
class Solution
{
public:string check(string &s){string res;for(auto ch : s){if(ch != '#') res += ch; // 如果不是‘#’。直接加到res上else{if(res.size()) // 如果res中没有元素,但是遇到了‘#’,应该直接跳过不用pop_back()res.pop_back();} }return res;}bool backspaceCompare(string s, string t) {return check(s) == check(t); // 检查退格后的字符串是否相等}
};
基本计算机II
题目:基本计算器 II

思路
- 由于运算符只有
('+', '-', '*', '/')这四种,我们使用一个数组来模拟栈,插入每一个数,使用一个前缀字符来进行运算符的标记,初始设为加; - 当操作符
op遇到加减都更新,遇到乘除则与栈顶元素计算,遍历结束后,我们将栈中元素相加;
C++代码
class Solution
{
public:// 1. 遇到操作符,更新操作符op;// 2. 遇到数字;// 1>. 先将数字提取到tmp中// 2>. 根据op分类讨论// ①op == '+', tmp入栈// ②op == '-', -tmp入栈// ③op == '*', 直接和栈顶元素相×// ④op == '/', 直接和栈顶元素相÷int calculate(string s) {char op = '+';int i = 0, n = s.size();vector<int> v; // 模拟栈while(i < n){if(s[i] == ' ') i++;else if('0' <= s[i] && s[i] <= '9'){// 数字提取到tmp中int tmp = 0;while(i < n && '0' <= s[i] && s[i] <= '9')tmp = 10 * tmp + (s[i++] - '0');if(op == '+') v.push_back(tmp);else if(op == '-') v.push_back(-tmp);else if(op == '*') v.back() *= tmp;else v.back() /= tmp;}else {op = s[i];i++;}}int res = 0;for(auto x : v){res += x;}return res;}
};
字符串解码
题目:字符串解码

思路
- 定义两个栈一个字符串、一个int变量
- 遇到数字放入数字栈
- 遇到
[,把后面的字符串提取、放入字符串栈 - 遇到
],取出两栈顶元素解析,放入字符串栈的栈顶元素后面 - 遇到字符, 提取字符,放入字符串栈的栈顶元素后面
C++代码
class Solution
{
public:// 两个栈一个字符串、一个int变量// 1. 遇到数字放入数字栈;// 2. 遇到'[',把后面的字符串提取、放入字符串栈// 3. 遇到']',取出两栈顶元素解析,放入字符串栈的栈顶元素后面// 4. 遇到字符, 提取字符,放入字符串栈的栈顶元素后面string decodeString(string s) {stack<string> ss;stack<int> si;int i = 0, n = s.size();ss.push("");while(i < n){if(s[i] >= '0' && s[i] <= '9') {int t = 0;while ('0' <= s[i] && s[i] <= '9')t = 10 * t + (s[i++] - '0');si.push(t);}else if(s[i] == '[') {i++;string t = "";while(s[i] >= 'a' && s[i] <= 'z')t += s[i++];ss.push(t);}else if(s[i] == ']'){string t = ss.top();ss.pop();int j = si.top();si.pop();while(j--){ss.top() += t;}i++; // 跳过右括号}else{string t = "";while(i < n && s[i] >= 'a' && s[i] <= 'z')t += s[i++];ss.top() += t;}}return ss.top();}
};
验证栈序列
题目:验证栈序列

思路
用一个栈来模拟这个过程,最后栈为空则说明相匹配,否则说明不匹配
- 用
i来遍历pop数组,确定要出栈的元素- 判断栈顶元素是否等于要出栈的元素,如果相等则出栈,并
i++到下一个要出栈的元素上
class Solution
{
public:bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {stack<int> s;int n = popped.size();int i = 0; // 标志位:确定要出栈的元素for(auto ch : pushed){s.push(ch);// 判断栈顶元素是否等于要出栈的元素,如果相等则出栈,并将标志位挪到下一个要出栈的元素上while(s.size() && s.top() == popped[i]) {s.pop();i++;}}return s.empty(); }
};
相关文章:
算法笔记(九)——栈
文章目录 删除字符串中的所有相邻重复项比较含退格的字符串基本计算机II字符串解码验证栈序列 栈是一种先进后出的数据结构,其操作主要有 进栈、压栈(Push) 出栈(Pop) 常见的使用栈的算法题 中缀转后缀逆波兰表达式求…...
动态SLAM总结一
文章目录 方法分类:OctoMap:(2013)UFOMap:(2020)Removert:(2020)ERASOR:(2021)DynamicFilter:(202…...
HTB:Mongod[WriteUP]
连接至HTB服务器并启动靶机 靶机IP:10.129.99.33 分配IP:10.10.16.12 1.How many TCP ports are open on the machine? 使用nmap对靶机进行全端口TCP脚本、服务扫描: nmap -sC -sV -T4 -p- {TARGET_IP} 可以看到靶机共开放TCP端口2个&…...
DenseNet算法:口腔癌识别
本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 DenseNet算法结构 其基本思路与ResNet一致,但是它建立的是前面所有层和后面层的密集连接,它的另一大特色是通过特征在channel上的连接来实现特征重用。 二 设计理念 三…...
828华为云征文 | 利用FIO工具测试Flexus云服务器X实例存储性能
目录 一、Flexus云服务器X实例概要 1.1 Flexus云服务器X实例摘要 1.2 产品特点 1.3 存储方面性能 1.4 测评服务器规格 二、FIO工具 2.1 安装部署FIO 2.2 主要性能指标概要 三、进行压测 3.1 测试全盘随机读IO延迟 3.2 测试全盘随机写IO延迟 3.3 测试随机读IOPS 3.4…...
Pikachu-File Inclusion- 本地文件包含
前端每次挑选篮球明星,都会通过get请求,传了文件名,把页面展示出来,由于文件名时前端传给后台;并且查看源码,没有对参数做限制; 尝试直接从前端修改filename 参数; filename../../../../../../…...
linux基础 超级笔记
1.Linux系统的组成 Linux系统内核:提供系统最核心的功能,如软硬件和资源调度。 系统及应用程序:文件、任务管理器。 2.Linux发行版 通过修改内核代码自行集成系统程序,即封装。比如Ubuntu和centos这种。不过基础命令是完全相…...
Python——异常处理机制
Python 异常处理机制 Python异常与异常处理机制针对 Traceback 的解读try-except-else-finallyexcept语句except语句的机制在 except 语句中引用当前被处理的 Python 异常 finally语句finally语句执行后才能抛出未被处理的异常finally中执行return会导致异常丢失 raise 语句rai…...
社群团购中的用户黏性价值:以开源小程序多商户AI智能名片商城源码为例
摘要:本文探讨社群团购中的用户黏性价值,分析其与传统团购网站的区别,并阐述开源小程序多商户AI智能名片商城源码在增强社群团购用户黏性方面可能发挥的作用。 一、引言 在当今的商业环境中,社群团购逐渐成为一种重要的营销模式。…...
基于php的民宿预订管理系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…...
java 从基础到入门 到架构师所需要学习的路线
java是一种广泛使用的编程语言,可以应用于多种平台和应用程序。下面是一个从基础到入门,再到架构师所要掌握的Java学习路线的详细列举: 学习Java基础知识: 理解面向对象编程的概念,如类、对象、继承、多态等。 学习Ja…...
【吊打面试官系列-MySQL面试题】什么叫视图?游标是什么?
大家好,我是锋哥。今天分享关于【什么叫视图?游标是什么?】面试题,希望对大家有帮助; 什么叫视图?游标是什么? 视图是一种虚拟的表,具有和物理表相同的功能。可以对视图进行增&#…...
项目管理-信息技术发展
1、计算机软硬件 2、计算机网络 1)定义 2)分类:PAN LAN MAN WAN 公用网 专用网 3)网络协议 语法 语义 时许 4)网络标准协议 7层 5)IEEE 802 规范 6)TCP/IP 协议 7) SDN 软件定义网…...
异常处理【C++提升】(基本思想,重要概念,异常处理的函数机制、异常机制,栈解旋......你想要的全都有)
更多精彩内容..... 🎉❤️播主の主页✨😘 Stark、-CSDN博客 本文所在专栏: C系列语法知识_Stark、的博客-CSDN博客 座右铭:梦想是一盏明灯,照亮我们前行的路,无论风雨多大,我们都要坚持不懈。 异…...
基于springboot vue 电影推荐系统
博主介绍:专注于Java(springboot ssm 等开发框架) vue .net php python(flask Django) 小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆☆不然下次找…...
八、特殊类型异常机制
特殊类型&异常机制 数据类型枚举类型匿名类、单例类和伴生对象匿名类单例类伴生对象 委托模式密封类型异常机制异常的使用异常的处理 数据类型 对于那些只需要保存数据的类型,我们常常需要为其重写toString、equals等函数,针对于这种情况下…...
虾皮Shopee Android面试题及参考答案
HTTP 状态码有哪些? HTTP 状态码是用以表示网页服务器超文本传输协议响应状态的 3 位数字代码。主要分为五大类: 1xx 信息性状态码:表示服务器正在处理请求,这些状态码是临时的响应,主要用于告诉客户端请求已经被接收,正在处理中。例如,100 Continue 表示客户端应当继续…...
Docker Compose 部署大模型GPU集群:高效分配与管理算力资源
Docker Compose 部署大模型GPU集群:高效分配与管理算力资源 文章目录 Docker Compose 部署大模型GPU集群:高效分配与管理算力资源一 Dockerfile 编写二 Dockerfile 示例三 分配GPU资源1)GPU分配:指定count2)GPU分配&am…...
直立行走机器人技术概述
直立行走机器人技术作为现代机器人领域的重要分支,结合了机械工程、计算机科学、人工智能、传感技术和动态控制等领域的最新研究成果。随着技术的不断发展,直立行走机器人在救灾、医疗、家庭辅助等领域开始发挥重要作用。本文旨在对直立行走机器人的相关…...
【Linux】wsl虚拟机时间和实际时间不符合
本文首发于 ❄️慕雪的寒舍 偶然遇到了这个问题,触发原因是电脑在开启wsl的情况下进入了 休眠 模式,且在无网络情况下几天不使用。 然后开启wsl,发现git log显示最新commit的提交时间是明天,给我吓一跳,然后才发现原来…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
ios苹果系统,js 滑动屏幕、锚定无效
现象:window.addEventListener监听touch无效,划不动屏幕,但是代码逻辑都有执行到。 scrollIntoView也无效。 原因:这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作,从而会影响…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
