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

目录

a.20. 有效的括号

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

c.150. 逆波兰表达式求值


a.20. 有效的括号

题目链接

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。

有效字符串需满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

示例 1:

输入:s = "()"
输出:true

示例 2:

输入:s = "()[]{}"
输出:true

示例 3:

输入:s = "(]"
输出:false

思路:由于栈结构的特殊性,非常适合做对称匹配类的题目。这里考虑用栈做匹配,一般思路是遇到左括号入栈,遇到匹配的右括号弹出栈顶元素,也可以遇到左括号则相应右括号入栈,遇到右括号,比较栈顶元素与右括号是否相同,相同则弹出

class Solution {
public:bool isValid(string s) {if((s.size()%2)!=0)return false; //如果括号总数不是偶数,必然有多余括号没匹配上stack<char>st;for(int i=0;i<s.size();i++){if(s[i]=='('){st.push(')');}else if(s[i]=='['){st.push(']');}else if(s[i]=='{'){st.push('}');}else if(st.empty()|| s[i]!=st.top()) return false;else st.pop();}return st.empty();}
};

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

题目链接

给出由小写字母组成的字符串 S重复项删除操作会选择两个相邻且相同的字母,并删除它们。

在 S 上反复执行重复项删除操作,直到无法继续删除。

在完成所有重复项删除操作后返回最终的字符串。答案保证唯一。

示例:

输入:"abbaca"
输出:"ca"
解释:
例如,在 "abbaca" 中,我们可以删除 "bb" 由于两字母相邻且相同,这是此时唯一可以执行删除操作的重复项。之后我们得到字符串 "aaca",其中又只有 "aa" 可以执行重复项删除操作,所以最后的字符串为 "ca"。

 思路:比较栈顶元素,遇到相同元素则弹出栈顶元素,继续比较下一个元素;遇到不同元素,入栈,最后栈留存元素就是删除重复字母后的结果字符串(当然,得反转一下)

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

c.150. 逆波兰表达式求值

题目链接

给你一个字符串数组 tokens ,表示一个根据 逆波兰表示法 表示的算术表达式。

请你计算该表达式。返回一个表示表达式值的整数。

注意:

  • 有效的算符为 '+''-''*' 和 '/' 。
  • 每个操作数(运算对象)都可以是一个整数或者另一个表达式。
  • 两个整数之间的除法总是 向零截断 。
  • 表达式中不含除零运算。
  • 输入是一个根据逆波兰表示法表示的算术表达式。
  • 答案及所有中间计算结果可以用 32 位 整数表示。

示例 1:

输入:tokens = ["2","1","+","3","*"]
输出:9
解释:该算式转化为常见的中缀算术表达式为:((2 + 1) * 3) = 9

示例 2:

输入:tokens = ["4","13","5","/","+"]
输出:6
解释:该算式转化为常见的中缀算术表达式为:(4 + (13 / 5)) = 6

示例 3:

输入:tokens = ["10","6","9","3","+","-11","*","/","*","17","+","5","+"]
输出:22
解释:该算式转化为常见的中缀算术表达式为:((10 * (6 / ((9 + 3) * -11))) + 17) + 5
= ((10 * (6 / (12 * -11))) + 17) + 5
= ((10 * (6 / -132)) + 17) + 5
= ((10 * 0) + 17) + 5
= (0 + 17) + 5
= 17 + 5
= 22

思路:遇到运算符,取出栈里的两个元素,然后进行运算;否则将元素压入栈,注意tokens里的元素是字符串,需要转换一下类型

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

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

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

相关文章

Linux grep

文章目录 1. 基本用法2.字符转义3.二进制文件查找4.打印目标字段的附近行4. 多条件过滤5. 目录中过滤——用于在文件夹中筛选/排除指定后缀文件6.反向过滤——用于筛选7.只输出匹配内容——用于统计8. 筛选出包含字段的文件9.正则匹配10.管道和grep11.grep和wc/uniq/sort的合用…

B端系统优化,可不是换个颜色和图标,看看与大厂系统的差距。

Hi&#xff0c;我是贝格前端工场&#xff0c;优化升级各类管理系统的界面和体验&#xff0c;是我们核心业务之一&#xff0c;欢迎老铁们评论点赞互动&#xff0c;有需求可以私信我们 一、不要被流于表面的需求描述迷惑。 很多人找我们优化系统界面&#xff0c;对需求总是轻描淡…

小白跟做江科大51单片机之AD/DA

1.看原理图找接口 2.看时序图编写读取数据代码 XPT2046.c代码 #include <REGX52.H> //引脚定义 sbit XPY2046_DINP3^4; sbit XPY2046_CSP3^5; sbit XPY2046_DCLKP3^6; sbit XPY2046_DOUTP3^7; unsigned int XPT2046_ReadAD(unsigned char Command) { unsigned char …

sqllab 11-22

11.有回显&#xff0c;单引号 首先判断是字符型还是数字型 通过order by 来获取字段数 方便后续union联合 注意这里mime表明了内容要进行url编码&#xff0c;测试3报错&#xff0c;2正常&#xff0c;所以有2列。 还需要判断显示位&#xff0c;因为只有显示位的数据才能被爆出…

DDD领域驱动设计

一、什么是领域驱动设计DDD 领域驱动设计&#xff08;Domain-Driven Design&#xff0c;DDD&#xff09;是一种软件开发方法论&#xff0c;它提出了一组关于如何设计和构建软件系统的原则和方法。 二、DDD的诞生是为了解决哪些问题 对复杂业务领域的理解不足&#xff1a;传统…

网络安全及信息安全常识

网络安全及信息安全常识 闻知&#xff1a;西安之地&#xff0c;借软件正版化&#xff0c;诈骗违法犯罪多有。本人自2008年10月&#xff0c;以劳动合同入职软件公司后&#xff0c;知至今日&#xff0c;普通百姓&#xff0c;电脑知识匮乏。因此&#xff0c;当此时&#xff0c;有前…

MySQL如何查询根据某一条件分组,再查询出每组数据中时间最早或最晚的数据

最近遇到个需求&#xff0c;需要先根据A条件进行分组&#xff0c;然后查询出每组数据中时间最近的一条数据&#xff0c;立马就写出了sql语句 select * from (select * from b_equipment_maintenance whereequipment_id in (.......)ORDER BY create_time desc ) a GROUP BY …

leetcode:反转链表II,用C++ 实现

反转链表 II 问题描述 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回反转后的链表。 C 实现 /*** Definition for singly-linked list.* struct ListNode {* int…

论文笔记:Efficient Bootstrapping for Confidential Transactions

EcoBoost: Efficient Bootstrapping for Confidential Transactions 设计了一种被称为EcoBoost的新方法&#xff0c;以提高支持机密交易的区块链的引导效率。具体来说&#xff0c;利用随机抽样来验证高概率保密交易的正确性。因此&#xff0c;与事务数量相比**&#xff0c;验证…

【FPGA】DDR3学习笔记(一)丨SDRAM原理详解

本篇文章包含的内容 一、DDR3简介1.1 DDR3 SDRAM概述1.2 SDRAM的基础结构 二、 SDRAM操作时序2.1 SDRAM操作指令2.2 模式寄存器&#xff08;LOAD MODE REGISTER&#xff09;2.3 SDRAM操作时序示例2.3.1 SDRAM初始化时序2.3.2 突发读时序2.3.3 随机读时序2.3.4 突发写时序2.3.5 …

Apache Paimon 使用之 Writing Tables

Writing Tables 1.插入语法 INSERT { INTO | OVERWRITE } table_identifier [ part_spec ] [ column_list ] { value_expr | query };part_spec&#xff1a;PARTITION ( partition_col_name partition_col_val [ , … ] ) column_list&#xff1a;(col_name1 [, column_nam…

Python学习笔记-Flask实现简单的抽奖程序(增加图片显示)

1.创建static文件夹,存放图片文件 2.hero列表数据更改为要抽奖的图片名 3.html中可以编写python语句,遍历hero列表内容渲染到表格中 4.在点击随机抽取后,可以获得名称,然后使用img标签,将获取的名称拼接到路径中 3.初始页面,访问127.0.0.1:5000/index 4.点击随机抽取后 5.py…

【面试题】mysql常见面试题及答案总结

事务中的ACID原则是什么? Mysql是如何实现或者保障ACID的? ACID原则是数据库事务管理中必须满足的四个基本属性&#xff0c;确保了数据库事务的可靠性和数据完整性。 简写全称解释实现A原子性&#xff08;Atomicity&#xff09;一个事务被视为一个不可分割的操作序列&#…

【深入理解设计模式】享元设计模式

享元设计模式 概述 享元设计模式&#xff08;Flyweight Design Pattern&#xff09;是一种用于性能优化的设计模式&#xff0c;它通过共享尽可能多的相似对象来减少对象的创建&#xff0c;从而降低内存使用和提高性能。享元模式的核心思想是将对象的共享部分提取出来&#xff…

人机交互中的定向、定性、定量

在人机交互中&#xff0c;定向、定性和定量分析都扮演着重要的角色&#xff0c;帮助设计师更好地理解用户需求、优化系统设计&#xff0c;并评估系统的性能和效果。这种综合的分析方法有助于打造更符合用户期望、更高效的人机交互系统。 在人机交互中&#xff0c;定向&#xff…

实用干货:分享4个冷门但非常实用的HTML属性

大家好&#xff0c;我是大澈&#xff01; 本文约1100字&#xff0c;整篇阅读大约需要2分钟。 关注微信公众号&#xff1a;“程序员大澈”&#xff0c;免费加入问答群&#xff0c;一起交流技术难题与未来&#xff01; 现在关注公众号&#xff0c;免费送你 ”前后端入行大礼包…

炉石传说(ccf201609-3)解题思路

题目 * 玩家会控制一些角色&#xff0c;每个角色有自己的生命值和攻击力。当生命值小于等于 0 时&#xff0c;该角色死亡。角色分为英雄和随从。   * 玩家各控制一个英雄&#xff0c;游戏开始时&#xff0c;英雄的生命值为 30&#xff0c;攻击力为 0。当英雄死亡时&#xff…

软件设计师软考题目解析23 --每日五题

想说的话&#xff1a;要准备软考了。0.0&#xff0c;其实我是不想考的&#xff0c;但是吧&#xff0c;由于本人已经学完所有知识了&#xff0c;只是被学校的课程给锁在那里了&#xff0c;不然早找工作去了。寻思着反正也无聊&#xff0c;就考个证玩玩。 本人github地址&#xf…

TensorRT是什么,有什么作用,如何使用

TensorRT 是由 NVIDIA 提供的一个高性能深度学习推理&#xff08;inference&#xff09;引擎。它专为生产环境中的部署而设计&#xff0c;用于提高在 NVIDIA GPU 上运行的深度学习模型的推理速度和效率。以下是关于 TensorRT 的详细介绍&#xff1a; TensorRT 是 NVIDIA 推出的…

Hive中增量插入的处理

增量数据采集&#xff0c;目前实现的方式是hive中按某个字段创建分区表&#xff0c; insert override的时候where语句带上对应的增量过滤条件。 我一般选取日期字段ETL_DATE。 hive建立分区表&#xff0c;hql如下&#xff1a; CREATE TABLE IF NOT EXISTS product_sell( cate…