day11 有效的括号 删除字符串中的所有相邻重复项 逆波兰表达式求值

题目1:20 有效的括号

题目链接:20 有效的括号

题意

判断字符串是否有效,若有效:

1)左括号必须用相应的右括号

2)左括号的闭合顺序正确  ({)}顺序不正确,应该是({})

3)右括号都对应相同类型的左括号

栈适合做对称匹配类的题目

分类:有3种不匹配的情况

遇到左括号,栈里放入对应的右括号;遇到右括号,就将该元素与栈口的元素进行比较

逻辑

例1:为啥要用栈,使用队列不行吗

代码

class Solution {
public:bool isValid(string s) {stack<int> st;//剪枝,括号匹配是2的倍数if(s.size()%2!=0){return false;}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();}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

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

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

题意

反复删除字符串(小写字母组成)S中两个相邻的相同的字母

栈非常适合解决匹配对称问题

栈中存放遍历过的元素,栈顶元素与当前遍历的元素不匹配时,就将当前元素放入栈中;如果二者匹配,就将栈顶元素弹出,但是最终返回的数组需要再reverse一下,数组中元素的顺序才正确

代码

class Solution {
public:string removeDuplicates(string s) {stack<char> st;//栈中放的是一个个字符(char类型),不是string类型for(int i=0;i<s.size();i++){if(st.empty()||st.top()!=s[i]){st.push(s[i]);}else{st.pop();}}string result = "";while(!st.empty()){result.push_back(st.top());//从记录到result的顺序是颠倒的st.pop();}reverse(result.begin(),result.end());return result;}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

数组

受到上面栈的启发,使用数组替换也可以

直接拿着数组当作栈来使用,逻辑与栈一样,最终直接返回这个数组就可以了

代码

class Solution {
public:string removeDuplicates(string s) {string result;for(char str:s){if(result.empty()||result.back()!=str){result.push_back(str);}else{result.pop_back();}}return result;}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(1),返回值不计空间复杂度

逻辑

例1:能否使用队列?

使用1个队列不合适,因为队列是先入先出的结构,会弹出不必要的元素

使用两个队列的话,第二个个队列做备份,当第一个队列对应相同的元素弹出时,再将备份队列中的元素放到第一个队列中,就是上节模拟栈的那个代码,但是会有错误,原因就是相同的元素使得最终定位查找的时候很难

题目3:150 逆波兰表达式

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

题意

计算字符串数组tokens(表示为逆波兰表达式的算术表达式)的结果

最终的结果以及中间结果可以用32位整数表示,

遇到数字,则入栈,遇到运算符(+ - * /)取出栈顶的两个元素计算,将结果压入栈

逆波兰表达式就是二叉树的后序遍历(左右中)

① 注意字符串是string类型的数组,引用其中的某个元素要用""

② 注意运算顺序,nums2在前

③ 注意st定义的是int类型的,方便直接拿出来进行运算,所以最终放到st的各个string类型的数字要转化为int类型,这样才可以参与运算

代码

class Solution {
public:int evalRPN(vector<string>& tokens) {//tokens里面的每个元素是string类型,stack<int> st;//栈内元素是整数类型,栈中的元素才可以拿出来运算for(int i=0;i<tokens.size();i++){//这里必须使用"",因为tokens是string类型的数据if(tokens[i]=="+"||tokens[i]=="-"||tokens[i]=="*"||tokens[i]=="/"){int nums1 = st.top();st.pop();int nums2 = st.top();st.pop();if(tokens[i]=="+"){//一定要将nums2放在前面st.push(nums2 + nums1);}else if(tokens[i]=="-"){st.push(nums2 - nums1);}else if(tokens[i]=="*"){st.push(nums2 * nums1);}else if(tokens[i]=="/"){st.push(nums2 / nums1);}}else{st.push(stoi(tokens[i]));//因为st是int型的,而tokens是string类型的,所以进行类型转换}}int result = st.top();st.pop();return result;}
};
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

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

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

相关文章

如何使用GaussDB创建脱敏策略(MASKING POLICY)

目录 一、前言 二、GaussDB中的脱敏策略 1、数据脱敏的定义 2、创建脱敏策略的语法说明 三、在GaussDB中如何创建数据脱敏策略(示例) 1、创建脱敏策略的一般步骤 2、GaussDB数据库中创建脱敏策略的完整示例 1&#xff09;开启安全策略开关&#xff0c;以初识用户omm登录…

Qt/QML编程学习之心得:一个音频播放器的实现(29)

在window下&#xff0c;打开音乐播放器&#xff0c;然后打开一个.mp3文件&#xff0c;就可以实现播放了&#xff0c;那么在Qt/QML中如何实现呢&#xff1f;首先所有的设计都是基于音乐播放器的&#xff0c;嵌入式linux下同样也有音乐播放器&#xff0c;比如mplayer。其调用方法…

Python语法进阶学习--模块和包

在学习python进阶知识中的面向对象之前,还要了解一下当中几个概念:包、模块、类和函数。 一.模块和包 模块和包:用来组织Python代码的。 包 > 含有 __init__.py文件的文件夹模块 > py文件类 > class 【面向对象学习】函数&#xff08;方法&#xff09;> def 以上均…

Unity3D时间类Time和DateTime的用法

系列文章目录 Unity知识点 文章目录 系列文章目录前言一、Time和DataTime的区别1-1、命名空间不同 二、Time和DataTime的使用2-1、Time类2-2、代码解释如下&#xff1a;2-3、DataTime类2-4、代码解释如下&#xff1a; 三、实际应用3-1、Time类测试性能代码如下3-2、运行结果如…

小H靶场笔记:DC-7

DC-7 January 8, 2024 4:11 PM Tags&#xff1a;Drupal 8&#xff1b;Drush Owner&#xff1a;只惠摸鱼 信息收集 使用arp-scan和nmap扫描C段存活主机&#xff0c;探测到靶机ip&#xff1a;192.168.199.137&#xff0c;且开放80、22端口 探测22、80开放端口的服务、版本、操…

Mac电脑系统提速软件CleanmyMac X2024

Mac是现代人日常工作时必不可少的工具&#xff0c;尤其是在居家办公已经屡见不鲜的当下。视频会议、文档传送、视频剪辑等等。它在工作中扮演的角色越来越重要&#xff0c;所以也导致了它的流畅程度可以在很大程度上影响人们一整天的工作效率和心情。 CleanMyMac X全新版下载如…

Shiro框架:ShiroFilterFactoryBean过滤器源码解析

目录 1.Shiro自定义拦截器SpringShiroFilter 1.1 ShiroFilterFactoryBean解析 1.1.1 实现FactoryBean接口 1.1.2 实现BeanPostProcessor接口 1.2 SpringShiroFilter解析 1.2.1 OncePerRequestFilter过滤逻辑实现 1.2.2 AbstractShiroFilter过滤逻辑实现 1.2.2.1 创建Sub…

Alphalens 因子分析 - 以低换手率因子为例(1)

因子分析是量化研究的基本技能之一。通过因子分析,找出有效的因子,通过相关性去重后,就可以通过机器学习、线性回归等方法把因子组合起来,构成交易策略。 这一篇笔记我们就介绍如何使用 Alphalens 来进行单因子分析。我们使用的因子是低换手率因子。 股谚有一种说法,天量…

风速预测 | 基于深度学习的风速预测模型(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 风速预测 | 基于深度学习的风速预测模型&#xff08;Matlab&#xff09; 程序设计 完整程序和数据获取方式&#xff1a;私信博主回复基于深度学习的风速预测模型&#xff08;Matlab&#xff09;。 参考资料 [1] htt…

【Flutter 开发实战】Dart 基础篇:常用运算符

在Dart中&#xff0c;运算符是编写任何程序的基本构建块之一。本文将详细介绍Dart中常用的运算符&#xff0c;以帮助初学者更好地理解和运用这些概念。 1. 算术运算符 算术运算符用于执行基本的数学运算。Dart支持常见的加、减、乘、除、整除以及取余运算。常见的算数运算符如…

智慧灯杆sip广播可视对讲解决方案

智慧灯杆sip广播可视对讲解决方案 智能路灯以城市公共设施的全面高效利用为出发点&#xff0c;根据路况加载智能照明、新能源汽车充电桩、城市广播、视频监控、WIFI热点、LED/LCD信息发布、环境监测、微型基站、停车场管理、井盖等。监控和USB手机充电灯功能&#xff0c;不仅能…

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步&#xff0c;API&#xff08;应用程序编程接口&#xff09;安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增&#xff0c;组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年&#xff0c;预计几个关键…

海外代理IP在游戏中有什么作用?

随着科技的飞速发展&#xff0c;手机和电脑等电子产品已成为互联网连接万物的重要工具&#xff0c;深度融入我们的日常生活&#xff0c;我们借助互联网完成工作、休闲和购物等任务&#xff0c;以求提升生活质量。 不仅如此&#xff0c;网络游戏也是人们心中最爱&#xff0c;它…

前端开发的新纪元:全方位工具栈探索 | 开源专题 No.57

vuejs/vue Stars: 205.6k License: MIT Vue 是一个用于构建用户界面的渐进式框架。它从头开始设计&#xff0c;可以根据不同的使用情况轻松地在库和框架之间进行扩展。Vue 由一个专注于视图层的核心库组成&#xff0c;并且还有一系列支持性库来帮助您处理大型单页应用程序中的…

YOLOv8改进 | 主干篇 | 12月份最新成果TransNeXt特征提取网络(全网首发)

一、本文介绍 本文给大家带来的改进机制是TransNeXt特征提取网络,其发表于2023年的12月份是一个最新最前沿的网络模型,将其应用在我们的特征提取网络来提取特征,同时本文给大家解决其自带的一个报错,通过结合聚合的像素聚焦注意力和卷积GLU,模拟生物视觉系统,特别是对于中…

MySQL 8.0 InnoDB 架构之 日志缓冲区(Log Buffer)和重做日志(Redo Log)

文章目录 MySQL 8.0 InnoDB 架构之 日志缓冲区&#xff08;Log Buffer&#xff09;和重做日志&#xff08;Redo Log&#xff09;REDO相关主要参数innodb_log_buffer_size innodb_redo_log_capacityinnodb_log_group_home_dir参考 【免责声明】文章仅供学习交流&#xff0c;观点…

web前端(html)练习

第一题 1. 用户名为文本框&#xff0c;名称为 UserName&#xff0c;长度为 15&#xff0c;最大字符数为 20。 2. 密码为密码框&#xff0c;名称为 UserPass&#xff0c;长度为 15&#xff0c;最大字符数为 20。 3. 性别为两个单选按钮&#xff0c;名称为 sex&#xff0c;值分…

链表--141.环形链表/easy C级理解

141.环形链表 1、题目2、题目分析3、解题步骤4、复杂度最优解代码示例5、抽象与扩展 1、题目 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链…

750ml离心瓶进口国产离心机通用750ml离心杯高低速离心机瓶

750ml低速离心瓶系列&#xff1a; 产品货号&#xff1a;ZY1136222 材质&#xff1a;PPCO 容量&#xff08;ml&#xff09;&#xff1a;750 尺寸&#xff08;O.DxH,mm&#xff09;&#xff1a;98.5x147 最大离心力&#xff08;xg&#xff09;&#xff1a;6000 产品货号&…

CloudCompare——点云空间圆拟合

目录 1.概述2.软件实现3.完整操作4.相关代码 本文由CSDN点云侠原创&#xff0c;CloudCompare——点云空间圆拟合&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫与GPT生成的文章。 1.概述 CloudCompare软件中的Tools——>…