代码随想录算法训练营第十一天|20 有效的括号、1047 删除字符串中的所有相邻重复项、150 逆波兰表达式求值

20 有效的括号

题目链接:有效的括号

思路

由于栈结构的特殊性,非常适合做对称匹配类的题目。按照逻辑来讲,首先我们要确定下有几种不匹配的情况:

  • 多了左括号
  • 多了右括号
  • 左右括号不匹配

然后左括号和右括号是一对一的,在消除完后,理应栈为空。
在多了左括号时,可以想到的是,消除结束后,栈不为空。
在多了右括号时,可以想到的是,栈中没有匹配的元素可以出栈。
左右括号不匹配时,可以想到的是,栈中出栈的元素和字符串中的元素不相等。

class Solution {
public:bool isValid(string s) {stack<char> st;for(int i=0; i<s.length(); 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;}else{st.pop();}}if(st.empty()){return true;}else{return false;}}
};

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

题目链接:删除字符串中的所有相邻重复项

思路

这道题目天生就是为栈这种数据类型准备的。元素进栈时,如果栈顶元素和元素相等,则消除,弹出栈顶元素。只不过要注意栈为空时,无法获得栈顶元素这种情况。然后将字符串中的所有元素遍历,最终栈中剩下的元素就是剔除相邻重复项后的字符串,只不过进行了翻转,所有还要做个翻转。

class Solution {
public:string removeDuplicates(string s) {stack<int> st;for(int i=-1; i<s.length(); i++){if(st.empty()){st.push(s[i]);}else if(s[i] == st.top()){`st.pop();}else{st.push(s[i]);}} string result = "";while(!st.empty()){result += st.top();st.pop();}reverse(result.begin(), result.end());return result;}
};

150 逆波兰表达式求值

题目链接:逆波兰表达式求值

思路

这道题目和上题类似,遇到+、-、*、/符号时弹出栈中的两个元素,然后做相应运算后再入栈。

class Solution {
public:int evalRPN(vector<string>& tokens) {stack<int> st;int a,b;for(int i=0; i<tokens.size(); i++){if(tokens[i] == "+"){a = st.top();st.pop();b = st.top();st.pop();st.push(b + a); }else if(tokens[i] == "-"){a = st.top();st.pop();b = st.top();st.pop();st.push(b - a); }else if(tokens[i] == "*"){a = st.top();st.pop();b = st.top();st.pop();st.push(b * a); }else if (tokens[i] == "/"){a = st.top();st.pop();b = st.top();st.pop();st.push(b / a); }else{st.push(stoi(tokens[i]));}}return st.top();}
};

参考链接:

  1. https://programmercarl.com/0150.%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC.html#%E6%80%9D%E8%B7%AF

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

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

相关文章

[202401C]巨人之力的题解

原题描述&#xff1a; 时间限制: 1000ms 空间限制: 262144kb 题目描述 两千多年以前&#xff0c;身为艾尔迪亚人的尤弥尔意外获得巨人之力&#xff0c;并且创造了九大巨人&#xff0c;其无以匹敌的力量使得整个世界都陷入了无尽的战乱纷争&#xff0c;艾尔迪亚之外的人类过…

使用excel从1-2048中随机选择1个整数,并展示与其对应的单词

在Excel中&#xff0c;你可以使用以下指令来从1到2048之间随机选择一个整数&#xff0c;并展示其对应的单词&#xff1a; 1. 首先&#xff0c;在一个空白单元格中输入以下公式&#xff1a; INDEX(单词列表范围, RANDBETWEEN(1, 2048)) 这里的"单词列表范围"是一个包…

Vue中对前端按钮高亮的几种操作方式

在Vue中我们有时候会碰到一些需求&#xff0c;就是在点击某个按钮的时候&#xff0c;我们执行别的操作&#xff0c;但是我们希望点击别的操作的时候&#xff0c;让我们之前点击的按钮进行处于高亮状态。 个人在处理业务的时候&#xff0c;测试说&#xff0c;当用户选择某个按钮…

thinkphp6 模糊查找json下的字段值

写法&#xff1a; where(json的字段->json下的字段) sql生成json_extract(json的字段&#xff0c;$.json下的字段1.json下的字段2) 可以加上like where(‘‘json的字段->json下的字段, ‘like’, ‘%’. keyword .’%’) sql生成json_extract(json的字段&#xff0c;$.js…

Redis面试题15

Redis 集群的数据一致性如何保证&#xff1f; 答&#xff1a;Redis 集群的数据一致性是通过内置的集群协议和数据迁移机制来保证的。 在 Redis 集群中&#xff0c;数据被分为多个槽&#xff08;slot&#xff09;&#xff0c;每个槽对应一个节点。当一个节点接收到写操作时&…

[GN] Vue3.2 快速上手 ---- 核心语法2

文章目录 标签的 ref 属性props生命周期自定义hook总结 标签的 ref 属性 用在普通DOM标签上&#xff0c;获取的是DOM节点。用在组件标签上&#xff0c;获取的是组件实例对象。 用在普通DOM标签上&#xff1a; <template><div class"person"><h3 ref&…

docker-compose直接官网二进制文件安装(linux)

试了很多种方法&#xff0c;国内镜像库安装&#xff0c;会报语法错误 直接用github官网&#xff0c;命令安装下载太慢&#xff0c;还不如魔法下载 官网链接docker-compose-linux-x86_64https://github.com/docker/compose/releases/download/v2.24.1/docker-compose-linux-x8…

温度采样【通道选通】S9KEAZ128的PTA2和PTA3引脚无法拉高

1、问题记录&#xff1a;由18串温度采样修改成32串温度采样&#xff0c;增加一路adc采样&#xff0c;通过cd4051控制通道选通&#xff0c;代码中增加了相应的代码&#xff0c;发现增加的最后8路温度不能够控制&#xff0c;以24串为例&#xff0c;给温度传感器增加温度&#xff…

pytorch(四)、完整小网络的搭建和sequential的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言搭建小网络和sequential的使用一、 第一种形式如下&#xff1a;二、第二种方式&#xff0c;使用sequential 前言 至此&#xff0c;神经网络的基础部分就基本结…

解决Spring Boot跨域问题(配置JAVA类)

什么是跨域问题 跨域问题指的是不同端口之间&#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制&#xff0c;它是为了保证用户的安全&#xff0c;防止恶意网站窃取数据。 比如前端用的端口号为8081&#xff0c;后端用的端口号为8080&#xff0c;后…

C语言从入门到实战——编译和链接

编译和链接 前言一、 翻译环境和运行环境二、 翻译环境2.1 预处理&#xff08;预编译&#xff09;2.2 编译2.2.1 词法分析2.2.2 语法分析2.2.3 语义分析 2.3 汇编2.4 链接 三、 运行环境 前言 在C语言中&#xff0c;编译和链接是将源代码转换为可执行文件的两个主要步骤。 编…

Linux C语言开发(七)内存分类

目录 一.前言 二.动态内存 三.静态内存 四.动态内存与静态内存的区别 一.前言 C语言以其高效性而闻名,一个代码若想高效,则必须对内存空间进行合理的利用和分配。根据内存分配方式不同可以分

MacBookPro怎么数据恢复? mac电脑数据恢复?

使用电脑的用户都知道&#xff0c;被删除的文件一般都会经过回收站&#xff0c;想要恢复它直接点击“还原”就可以恢复到原始位置。mac电脑同理也是这样&#xff0c;但是“回收站”在mac电脑显示为“废纸篓”。 如果电脑回收站&#xff0c;或者是废纸篓里面的数据被清空了&…

docker安装nginx

拉取镜像 docker pull nginx 运行 docker run --name nginx -p 80:80 -d nginx 本地创建管理目录 创建挂载文件夹 mkdir -p /home/nginx mkdir -p /home/nginx/www mkdir -p /home/nginx/conf

App 测试工具大全,收藏这篇就够了

随着移动互联网的高速发展&#xff0c;App应用非常火&#xff0c;测试工程师也会接触到各种app应用。除了人工测试之外&#xff0c;也可以通过一些测试工具来提高我们的测试效率&#xff0c;以下对于我用过或听过的app测试工具做了一个统一整理&#xff0c;欢迎补充。 一、APP自…

【51单片机Keil+Proteus8.9+ADC0804】ADC实验 模拟转数字实验

一、实验名称 ADC实验 模拟转数字实验 二、设计思路 电路设计 1.选用AT89C51单片机作为电路核心单元&#xff0c;外接8位单通道AD转换器ADC0804芯片和LM016L显示器以及滑动变阻器等其它常用元器件构成电路。 2.将ADC0804芯片的控制引脚RD,WR,INTR接到AT89C51芯片对应引脚&…

Spring Boot程序的打包与运行:构建高效部署流程

引言 在现代应用开发中&#xff0c;高效的打包和部署流程对于项目的开发、测试和上线至关重要。Spring Boot作为一种快速开发框架&#xff0c;提供了方便的打包工具和内嵌式的Web服务器&#xff0c;使得打包和运行变得更加简单。本文将研究在Spring Boot应用中如何进行打包&am…

外包干了5个月,技术退步明显...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

【数据库】聊聊InnoDB存储引擎结构

在学习任何技术、框架、中间件的时候&#xff0c;我们都需要从一个宏观的角度先去了解一下大概视角&#xff0c;然后在通过剖定解牛的方式进行细分点的学习&#xff0c;同样对于任何存储结构来说&#xff0c;基本上都包含几块内容。 通信&#xff1a;解决信息传输问题、存储模型…

k8s资源介绍

Kubernetes架构图 Kubernetes系统用于管理分布式节点集群中的微服务或容器化应用程序&#xff0c;并且其提供了零停机时间部署、自动回滚、缩放和容器的自愈&#xff08;其中包括自动配置、自动重启、自动复制的高弹性基础设施&#xff0c;以及容器的自动缩放等&#xff09;等…