算法刷题Day11 | 20. 有效的括号、1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值

目录

  • 0 引言
  • 1 有效的括号
    • 1.1 我的解题
  • 2 删除字符串中的所有相邻重复项
    • 2.1 我的解题
  • 3 逆波兰表达式求值
    • 3.1 我的解题

请添加图片描述

  • 🙋‍♂️ 作者:海码007
  • 📜 专栏:算法专栏
  • 💥 标题:
  • ❣️ 寄语:书到用时方恨少,事非经过不知难!

0 引言

1 有效的括号

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:简单

1.1 我的解题

class Solution {
public:bool isValid(string s) {stack<char> myStack;// 遇到左括号压栈,遇到右括号则判断与栈顶元素是否构成一对,构成一对则出栈否则压栈for (auto subS : s){if (subS == '(' || subS == '[' || subS == '{'){myStack.push(subS);}else if (subS == ')'){// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '('){myStack.pop();}else{myStack.push(subS);}}else if (subS == ']'){// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '['){myStack.pop();}else{myStack.push(subS);}}else{// 如果遇到右括号先出现的情况,则直接返回falseif (myStack.empty()) return false;if (myStack.top() == '{'){myStack.pop();} else{myStack.push(subS);}}}return myStack.empty();}
};

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

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:简单

2.1 我的解题

class Solution {
public:string removeDuplicates(string s) {// 逻辑类似消消乐,遇到相同的元素则删除stack<char> myStack;for (auto subS : s){// 判断新压栈的元素和栈顶元素是否相等,如果相等,则pop栈顶元素if (!myStack.empty() && myStack.top() == subS){myStack.pop();}else{myStack.push(subS);}}//此时要将字符串按顺序输出,则还需要借助一个栈(或者直接使用string的翻转字符串函数 reverse )stack<char> outStack;int size = myStack.size();for (int i = 0; i < size; i++){outStack.push(myStack.top());myStack.pop();}string result;for (int i = 0; i < size; i++){result.push_back(outStack.top());outStack.pop();}return result;}
};

3 逆波兰表达式求值

  • 🎈 文档讲解
  • 🎈 视频讲解
  • 🎈 做题状态:知道规则了也不难

3.1 我的解题

逆波兰表达式求值的规则:从左到右遍历表达式的每个数字和符号,遇到数字就进栈,遇到符号就将处于栈顶的两个数字出栈,进行运算(第二个出栈的元素 运算符 第一个出栈的元素),运算结果进栈,一直到获得最终结果。

回顾点:字符串转换为 int 类型的函数 atoi(s.c_str()) ,不然还得手动转换

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> calculate;int leftNumber = 0, rightNumber = 0;for (auto s : tokens){// 遇到数字就入栈if (s != "+" && s != "-" && s != "*" && s != "/"){// 将字符串转换为数字calculate.push(atoi(s.c_str()));continue;}// 遇到运算符就取出栈顶两个元素进行运算,然后再将结果入栈rightNumber = calculate.top();calculate.pop();leftNumber = calculate.top();calculate.pop();if (s == "+"){calculate.push(leftNumber + rightNumber);}else if (s == "-"){calculate.push(leftNumber - rightNumber);}else if (s == "*"){calculate.push(leftNumber * rightNumber);}else{calculate.push(leftNumber / rightNumber);}}return calculate.top();}
};int main()
{vector<string> tokens = { "10","6","9","3","+","-11","*","/","*","17","+","5","+" };Solution test;int result = test.evalRPN(tokens);cout << result;
}

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

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

相关文章

Spring中使用内置的tomcat容器启动后自动退出问题解决方法

在Spring中使用内置的tomcat 启动后自动退出 退出代码为0 且不报任务错误的解决方法. 日志如下: Connected to the target VM, address: 127.0.0.1:51129, transport: socket 三月 15, 2024 11:55:00 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing Proto…

Linux下安装多个nodejs并映射Jenkins

背景 需要Jenkins中切换多个Node&#xff0c;比如nodejs16和nodesjs18,所以在宿主机按照好这两个版本&#xff0c;然后再映射到Jenkins容器中 步骤 1.下载地址 https://nodejs.org/dist/ 放到 cd /opt/soft/2.解压 tar -xzvf node-v16.20.0-linux-x64.tar.gz tar -xzvf n…

【IC设计】Verilog线性序列机点灯案例(一)(小梅哥课程)

文章目录 设计目标思路仿真结果时间点一&#xff1a;201ns时间点二&#xff1a;220ns时间点三&#xff1a;250,000,220ns时间点四&#xff1a;1,000,000,200ns时间点五&#xff1a;1,000,000,220ns 总结&#xff1a; 案例和代码来自小梅哥课程&#xff0c;本人仅对知识点做做笔…

【ansible】ansible的介绍和安装

前言运维自动化 云计算核心职能 搭建平台架构 日常运营保障 性能效率优化 相关工具 代码管理&#xff08;SCM&#xff09;&#xff1a;GitHub、GitLab、BitBucket、SubVersion 构建工具&#xff1a;maven、Ant、Gradle 自动部署&#xff1a;Capistrano、CodeDeploy 持续…

代码+视频,R语言使用BOOT重抽样获取cox回归方程C-index(C指数)可信区间

bootstrap自采样目前广泛应用与统计学中&#xff0c;其原理很简单就是通过自身原始数据抽取一定量的样本&#xff08;也就是取子集&#xff09;&#xff0c;通过对抽取的样本进行统计学分析&#xff0c;然后继续重新抽取样本进行分析&#xff0c;不断的重复这一过程N&#xff0…

针对BSV区块链新推出的网络访问规则NAR和警报系统AS的解释与问答

​​发表时间&#xff1a;2024年2月22日 BSV区块链社区团队最近开设了一个Twitter&#xff08;X&#xff09;话题空间&#xff0c;讨论BSV区块链协会最新推出的网络访问规则和警报系统的相关问题。 本次讨论由BSV区块链社区负责人Brett Banfe主持&#xff0c;以便社区成员更好…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

AMRT 3D 数字孪生引擎(轻量化图形引擎、GIS/BIM/3D融合引擎):智慧城市、智慧工厂、智慧建筑、智慧校园。。。

AMRT3D 一、概述 1、提供强大完整的工具链 AMRT3D包含开发引擎、资源管理、场景编辑、UI搭建、项目预览和发布等项目开发所需的全套功能&#xff0c;并整合了动画路径、精准测量、动态天气、视角切换和动画特效等工具。 2、轻量化技术应用与个性化定制 AMRT3D适用于快速开…

基于GA优化的CNN-GRU-Attention的时间序列回归预测matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1卷积神经网络&#xff08;CNN&#xff09;在时间序列中的应用 4.2 长短时记忆网络&#xff08;LSTM&#xff09;处理序列依赖关系 4.3 注意力机制&#xff08;Attention&#xff09; 4…

matplotlib绘图如何处理日期数据如“x月x日”

问题描述 数据文件如下图所示&#xff1a; 想要绘制横坐标为Date&#xff0c;纵坐标为Height的折线图&#xff08;其他类型的图也是类似的&#xff09;。关键的问题在于如何处理这种日期数据&#xff0c;正常绘图&#xff0c;并设置横坐标每隔x天显示刻度。 本文提供一个解决…

STM32初识2

复位和时钟控制&#xff08;RCC&#xff1a;reset clock control&#xff09; 系统复位 当发生以下任一事件时&#xff0c;产生一个系统复位&#xff1a; 1. NRST 引脚上的低电平 ( 外部复位 ) 2. 窗口看门狗计数终止 (WWDG 复位 ) 3. 独立看门狗计数终止 (IWDG 复位 ) …

服务器遭遇挖矿病毒syst3md及其伪装者rcu-sched:原因、症状与解决方案

01 什么是挖矿病毒 挖矿病毒通常是恶意软件的一种&#xff0c;它会在受感染的系统上无授权地挖掘加密货币。关于"syst3md"&#xff0c;是一种特定的挖矿病毒&#xff0c;它通过在受感染的Linux系统中执行一系列复杂操作来达到其目的。这些操作包括使用curl从网络下载…