括号匹配(终极版)(典型栈的运用的题目,值得一看)

括号匹配时运用栈的一个典型例子,它是充分利用了栈先进后出的特性,在这之前,我们先来看一个简单的题目

括号匹配1

Description

输入一串带括号的表达式,判断输入的表达式是否合理。即判断括号是否匹配。为了简化题目,只输入左、右括号。如果表达式合理,输出YES,如果不合理,输出NO.

Format

Input

一行只包含左右括号的字符串。

Output

如果表达式合理,输出YES,如果不合理,输出NO.

Samples

Sample Input 1
()(())
Sample Output 1
YES
Sample Input 2
())(
Sample Output 2
NO

 如果你是初学栈,那是不是感觉毫无头绪,完全不知道这和栈有神马关系,没事,我们来慢慢理

有人会直接想直接比较左括号和右括号的数量就可以了,这是明显的错误,我们举个反例:)(

所以这个题的解题思路应该是当出现一个右括号的时候,就用当前最后一个左括号来匹配。如果出现右括号的时候前面没有未匹配的左括号。那么表示输出表达式不合理。

会了吗?我们来把上述的思路转化为专业术语:

首先,建立一个栈,用来存储左括号,而后定义一个临时输入的变量,边输入边判断,遇到违反上述规定的,就直接输出NO,然后return 0,直接结束。

但是这里得注意一个点,就是可能会在匹配结束后还有左括号没有使用,这是后也是不行的,所以要在匹配结束后检查一下栈是不是还有值。

ACcode

#include<bits/stdc++.h>
using namespace std;stack<char> q1,q2;
int main(){char cmp;while (cin>>cmp){if (cmp=='('){q1.push(cmp);}else{if (q1.empty()==0){q1.pop();}else{cout<<"NO";return 0;}}}if (q1.empty()==0){cout<<"NO";}else cout<<"YES";return 0;
}

会了吗?会了的话括号匹配(终极版)你还是做不来

咳咳,所以说我们还要练,再来看看括号匹配2

括号匹配2

题目描述

假设一个表达式由三种括号和四种表达符号组成,现为了简化题目,只输入表达式中的括号。判断括号是否合理。注意:成对的括号内不能有未匹配的括号。暂时不考虑小括号一定要在大括号里面的问题

输入格式

只有三种括号的表达式

输出格式

如果可以匹配输出YES“,如果不可以匹配输出“NO”。

样例 #1

样例输入 #1
([)]{}
样例输出 #1
NO

这道题比括号匹配多了两个条件,那么就特判一下就可以了

因为在成对的括号内不能有未匹配的括号,所以只需用一个栈,然后判断栈顶的括号和输入的括号是不是匹配的就完了

#include<bits/stdc++.h>
using namespace std;stack<int> q;
int main(){char cmp;while (cin>>cmp){if(cmp=='('||cmp=='['||cmp=='{')q.push(cmp);else{
//这个地方必须判断栈是不是空栈,否则会REif (q.empty()==0&&(cmp==q.top()+1||cmp==q.top()+2)){//基于ASCLL码来写,不懂得可以查一下小括号,中括号和大括号的左右括号的关系q.pop();}else {cout<<"NO";return 0;}}        }if (q.empty()==0){cout<<"NO";}else {cout<<"YES";}return 0;
}

现在会了吗,会了的话,我们就可以尝试一下括号匹配终极版了,题是不是还没发出来

题目描述

输入的括号表达式中含有三种括号:(),[],{},判断表达式是否合理。

注意,括号由里到外的顺序只能是小括号,中括号,大括号。但是相同括号可以重叠,比如[[]]是可以的。

输入格式

一个括号表达式

输出格式

输出YES或者NO

样例 #1

样例输入 #1

[{[]}]

样例输出 #1

NO

样例 #2

样例输入 #2

{[]}

样例输出 #2

YES

 这个题比之前还要多了一个条件,就是括号从里到外的顺序只能是小括号,中括号,大括号。这就需要加一个判断等级的变量,因为我们知道,小括号的ASCLL码是小于中括号的。中括号的是小于大括号的,所以就可以基于此来写一个判断等级的变量,只不过需要在每一次输入左括号和匹配成功的时候更新一下就可以了

#include<bits/stdc++.h>
using namespace std;stack<int> q;
char cnt;//判断等级的变量
int main(){char cmp;while (cin>>cmp){if(cmp=='('||cmp=='['||cmp=='{'){q.push(cmp);cnt=cmp;//更新}else{if (q.empty()==0&&(cmp==q.top()+1||cmp==q.top()+2)&&cnt<=cmp){cnt=cmp;//更新q.pop();}else {cout<<"NO";return 0;}}        }if (q.empty()==0){cout<<"NO";}else {cout<<"YES";}return 0;
}

看了这么久,作者也写了这么久,能不能点一个赞,在收藏一下呢?最好的话在点个关注吧

谢谢啦!

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

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

相关文章

代码随想录KamaCoder46. 携带研究材料(第六期模拟笔试)

题目&#xff1a; 代码(首刷看解析 2024年2月22日&#xff09;&#xff1a; #include<vector> #include<iostream> using namespace std; int Pacakge(vector<int>& a,vector<int>& weights, vector<int>& values) {int M a[0];//…

js-cookie 的使用

安装 提示&#xff1a;这里可以几种方法都可以用 1.直接饮用cdn&#xff1a;<script src"https://cdn.jsdelivr.net/npm/js-cookie2/src/js.cookie.min.js"></script>2.本地下载下来后&#xff1a;<script src"/path/to/js.cookie.js">…

ElasticSearch语法

Elasticsearch 概念 入门学习: Index索引>MySQL 里的表(table)建表、增删改查(查询需要花费的学习时间最多)用客户端去调用 ElasticSearch(3 种)语法:SQL、代码的方法(4 种语法) ES 相比于 MySQL&#xff0c;能够自动帮我们做分词&#xff0c;能够非常高效、灵活地查询内…

【快速上手QT】04-定时器Timer

先来个小示例 我们先简单的来触发一下定时器。 #include "Zhetu.h"#include <qdebug.h>void Zhetu::timerEvent(QTimerEvent* event) { //定时器触发函数qDebug() << "Hello world"; }Zhetu::Zhetu(QWidget *parent): QMainWindow(parent){t…

C#,数值计算,矩阵的乔莱斯基分解(Cholesky decomposition)算法与源代码

一、安德烈路易斯乔尔斯基 安德烈路易斯乔尔斯基出生于法国波尔多以北的查伦特斯海域的蒙古扬。他在波尔多参加了Lyce e&#xff0c;并于1892年11月14日获得学士学位的第一部分&#xff0c;于1893年7月24日获得第二部分。1895年10月15日&#xff0c;乔尔斯基进入莱科尔理工学院…

量化粒度是什么???

目录 一、什么是量化粒度二、量化粒度方式三、总结 一、什么是量化粒度 量化粒度是指在模型量化中&#xff0c;对模型参数进行量化的级别。常见的量化粒度包括&#xff1a; Per-tensor 量化: 对每个 tensor 单独进行量化。 Per-layer 量化: 对每个 layer 的所有 tensor 共享…

解决采集时使用selenium被屏蔽的办法

解决采集时使用selenium被屏蔽的办法 实用seleniumbase uc模式 from seleniumbase import Driver driver Driver(ucTrue) # 使用UC模式UC模式是基于undetected-chromedriver 但做了一些优化更新&#xff0c;使用起来更方便 官方例子&#xff1a; from seleniumbase import …

关于音频编码标准AAC,Opus,MP3的概念、原理、优缺点

音频编码标准是用于压缩数字音频数据的技术规范&#xff0c;以减少存储和传输所需的带宽。以下是关于AAC、Opus和MP3这些音频编码标准的概念、原理、优缺点的简要描述&#xff1a; AAC (Advanced Audio Coding) 概念&#xff1a; AAC是一种音频编码标准&#xff0c;由MPEG-2和…

删除数组用delete和Vue.delete有什么区别

删除数组用delete和Vue.delete有什么区别&#xff1f; 在 JavaScript 中&#xff0c;delete 和 Vue.js 中的 Vue.delete 是两个完全不同的概念&#xff0c;它们在删除数组元素时的作用和效果也有所不同。 JavaScript 中的 delete 关键字&#xff1a; 在原生 JavaScript 中&a…

echarts实现表格图例

折线图的表格图例 <!--折线图--> <template><div class"title-container"><span class"title">{{typeof props.series string ? props.series : props.series.name}}</span></div><div v-if"props.series?…

PhotoSweeper X mac版 v4.8.5 相似重复照片清理工具 兼容 M1/M2

PhotoSweeper X for Mac是一款Mac重复照片/相似照片清理工具&#xff01;PhotoSweeper可以帮你进行&#xff1a;重复相似照片/数码相片查找、对比和删除&#xff0c;轻松清理Mac上的重复图片&#xff0c;非常实用。 应用介绍 PhotoSweeper X for Mac是一款Mac重复照片/相似照片…

实战打靶集锦-025-HackInOS

文章目录 1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查5. 提权5.1 枚举系统信息5.2 探索一下passwd5.3 枚举可执行文件5.4 查看capabilities位5.5 目录探索5.6 枚举定时任务5.7 Linpeas提权 靶机地址&#xff1a;https://download.vulnhub.com/hackinos/HackInOS.ova 1. 主机…

机器学习:训练模型后,发生了什么,最后得到什么

当你训练一个模型&#xff0c;尤其是在机器学习或深度学习的上下文中&#xff0c;实际上是在进行一系列计算和优化步骤&#xff0c;以便模型能够从提供的数据中学习。训练模型的过程大致如下&#xff1a; 1. 初始化模型参数 模型的参数&#xff08;如权重和偏置&#xff09;通…

【图片公式识别】图片公式转Word与LaTeX文档:智能识别与转换

前言 嘿&#xff0c;大家好呀&#xff01;&#x1f44b; 谁都知道&#xff0c;写 Word 文档里的公式可不是一件简单的事情&#xff01;你辛辛苦苦在键盘上敲出的数学公式&#xff0c;结果随着 Word 版本的更新&#xff0c;竟然变成了一张图片&#xff01;&#x1f624; 这简直就…

toFixed四舍五入

一、问题描述 3.145.toFixed(2) // 3.15 3.155.toFixed(2) // 3.15 3.1551.toFixed(2) // 3.16 3.1550000000000001.toFixed(2) // 3.16 3.15500000000000001.toFixed(2) // 3.15 二、原因分析&#xff1a…

板块一 Servlet编程:第八节 文件上传下载操作 来自【汤米尼克的JavaEE全套教程专栏】

板块一 Servlet编程&#xff1a;第八节 文件的上传下载操作 一、文件上传&#xff08;1&#xff09;前端内容&#xff08;2&#xff09;后端内容 二、文件下载&#xff08;1&#xff09;前端的超链接下载&#xff08;2&#xff09;后端下载 在之前的内容中我们终于结束了Servle…

Oracle 总结

Oracle常规命令 conn 用户/密码--客户端连接的命令 show user —显示当前登录的用户增删改查 增 insect into 表名(列名列表) values(值列表);删 删除符合条件数据 delete from EMP where ENAME ‘xxx’;删除所有EMP 所有数据 delete from EMP;截断表 truncate table EMP;注…

速盾网络:CDN节点无法读取您网站数据是什么意思

在使用CDN服务时&#xff0c;有时候可能会遇到提示&#xff1a;“CDN节点无法读取您网站数据”的情况&#xff0c;这意味着什么呢&#xff1f;让我们一起来解读速盾网络关于这个问题的解释。 意思解释&#xff1a; 当CDN节点无法读取您网站数据时&#xff0c;通常表示CDN节点…

Web应用程序的自动测试工具WebDriver简介

WebDriver 是一个开源的自动化测试工具&#xff0c;它提供了一套用于Web应用程序的自动化测试接口。通过这些接口&#xff0c;我们可以编写脚本来模拟用户的各种操作&#xff0c;如点击、拖拽、输入等&#xff0c;从而实现Web应用程序的自动化测试。 WebDriver 支持多种…