小技巧粗讲 - 用栈实现括号匹配的判断

2023-11-18

Codeforces上有一道我曾经讲过的题,买看过的小伙伴看这个链接:

https://blog.csdn.net/ericgipsy/article/details/79980874

然后再来一道题:

http://www.fjutacm.com/Problem.jsp?pid=1922

这道题和上一题差不多,它只需要判断匹配与否即可,但是要开多组,所以要加一步清空操作

while(!sta.empty()) sta.pop();

本人AC代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <stack>
#include <algorithm>
using namespace std;
const int Maxx = 2e6 + 7;
char s[Maxx];
int ans;
stack <char> sta;

int main() {
	while(~scanf("%s", s)) {
		int l = 0, r = 0;
		bool flg = 1;
		int ln = strlen(s);
		for(int i = 0; i < ln; i++) {
			if(s[i] == '<' || s[i] == '(' || s[i] == '[' || s[i] == '{') {
				l++;
				sta.push(s[i]);
			}
			else if(s[i] == '>') {
				r++;
				if(sta.empty()) {
					flg = 0;
					break;
				}
				if(sta.top() == '<') sta.pop();
				else {
					flg = 0; break;
				}
			}
			else if(s[i] == ')') {
				r++;
				if(sta.empty()) {
					flg = 0;
					break;
				}
				if(sta.top() == '(') sta.pop();
				else {
					flg = 0; break;
				}
			}
			else if(s[i] == ']') {
				r++;
				if(sta.empty()) {
					flg = 0;
					break;
				}
				if(sta.top() == '[') sta.pop();
				else {
					flg = 0; break;
				}
			}
			else if(s[i] == '}') {
				r++;
				if(sta.empty()) {
					flg = 0;
					break;
				}
				if(sta.top() == '{') sta.pop(); //匹配后出栈
				else {
					flg = 0; break;
				}
			}
		}
		while(!sta.empty()) sta.pop();
		if(l != r) flg = 0;
		if(flg) puts("YES");
		else puts("NO");
	}
	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

小技巧粗讲 - 用栈实现括号匹配的判断 的相关文章

  • 多线程实现事务回滚

    多线程实现事务回滚 特别说明CountDownLatch CountDownLatch的用法 CountDownLatch num 简单说明 主线程 mainThreadLatch await 和mainThreadLatch countD
  • 剑指 offer第62题-圆圈中最后剩下的数

    让小朋友们围成一个大圈 然后 随机指定一个数 m 让编号为 0 的小朋友开始报数 每次喊到 m 1 的那个小朋友要出列唱首歌 然后可以在礼品箱中任意的挑选礼物 并且不再回到圈中 从他的下一个小朋友开始 继续 0 m 1 报数 这样下去 直到
  • Proc批量处理需要注意的问题

    ProC中批量读取游标中的数据的时候 需要注意 最后一次批量读取游标中的数据的时候 数据被取到HostArray中 同时sqlca sqlcode被置为1403 NO DATA FOUND 如果在fetch后立即判断sqlca sqlcod
  • 隐藏selenium的特征

    1 chromedriver exe中的 cdc asdjflasutopfhvcZLmcfl 特征 cdc 是chromedriver exe的一个特征之一 很多网站会通过检测是否有这个特征来判断是否是selenium 解决方案 wind
  • centos7安装mate

    http www 45drives com wiki index php Installing MATE on CentOS 7 Note This guide assumes you have a CentOS 7 minimal ins
  • Python基础知识之5

    Python基础知识之5 文件操作 1 文件的打开与关闭 文件打开 在python 使用open函数 可以打开一个已经存在的文件 或者创建一个新文件 基本格式 open 文件名 访问模式 实例如下 f open test txt w 文件关
  • 关于soot静态分析的学习(一)

    本文中关于soot的研究使用 仅代表本人理解程度 因本人为0基础 所以如有出错 欢迎指出 一 soot是什么 Soot Java静态分析框架 其实Soot最开始设计的时候 主要目的就是为了对Java字节码程序进行优化 这里的优化就是指执行效
  • 【Qt】Qt事件系统

    00 目录 文章目录 00 目录 01 Qt事件系统概述 02 事件如何传递 03 事件类型 04 事件处理 05 事件过滤器 06 事件发送 附录 01 Qt事件系统概述 Qt 5 12 Qt Core The Event System

随机推荐

  • vb和asp如何用remote访问远程数据库

    访问远程数据库的情况有以下几种 1 访问远程数据库的access数据库2 访问远程mssql数据库或oracle等其他关系数据库 但是数据库通信端口被防火墙阻挡或其他网络原因造成无法使用该端口 本文仅在windows2000 advance
  • Sort List

    Sort a linked list in O n log n time using constant space complexity 题目要求用 O n log n 的时间复杂度和常数的空间复杂度来进行链表排序 O nlogn 的排序算
  • 怎么画出好看的神经网络图,神经元怎么画简笔画

    神经网络具体是什么 神经网络由大量的神经元相互连接而成 每个神经元接受线性组合的输入后 最开始只是简单的线性加权 后来给每个神经元加上了非线性的激活函数 从而进行非线性变换后输出 每两个神经元之间的连接代表加权值 称之为权重 weight
  • 使用AFNetworking(二)

    文章目录 HIHTTPSessionManager HIHTTPRequestManager HIHTTPRequest 注意事项 写代码没有什么具体的规范和方式 只是哪个更加合理罢了 老的项目HTTP请求使用的是AFNetworking找
  • python封装c++接口_第13篇:Cython封装C++类接口

    本篇我们将详细讲解Cython封装C 代码 并如何调用它们 在进行这个主题前 我们需要需要先讲解一下这些概念定义文件 实现文件 cimport 和import语句的区别 Cython还允许我们将项目分解为几个模块 它完全支持import语句
  • 大数据毕设选题 - 大数据招聘职业数据分析可视化系统(python 爬虫)

    文章目录 0 前言 1 课题背景 2 实现效果 3 Flask框架 4 数据爬虫 5 最后 0 前言 Hi 大家好 这里是丹成学长的毕设系列文章 对毕设有任何疑问都可以问学长哦 这两年开始 各个学校对毕设的要求越来越高 难度也越来越大 毕业
  • maven项目pom.xml中parent标签的使用

    本文来说下maven项目pom xml中parent标签的使用 文章目录 parent标签 parent标签由来 依赖排除 本文小结 parent标签 parent标签使用例子
  • HTML5编程简介及示例代码

    HTML5是一种用于构建网页和Web应用程序的标准 它引入了许多新的元素 属性和API 为开发者提供了更多的功能和灵活性 在本文中 我们将探讨HTML5编程的一些不同方面 并提供相应的示例代码 标题 Headings HTML5引入了新的标
  • 网络存储ISCSI实战

    1 网络存储iSCSI SCSI small computer system interface 小型计障机系统接口 SCSI以目前的定义来说就是一个硬盘的接口标准 你硬盘通过SCSI口插上 就可以使用SCSI的协议来对磁盘进行读写 iSC
  • 理解Servlet和Servlet容器、Web服务器等概念

    转载自http blog csdn net iAm333 之前在开源中国看到一篇文章 初学 Java Web 开发 请远离各种框架 从 Servlet 开发 觉得很不错 想到自己之前一直对各种框架执迷不悟 顿感惭愧 于是 看了孙鑫的 Ser
  • 递归与开根号运算

    include
  • 19功能之C++中调用C的函数要添加extern声明

    19功能之C 中调用C的函数要添加extern声明 因为C 支持重载 如果不添加extern声明的话 那么C 编译后的名字是与C的不一样 当执行时 去C库中找 会找不到该函数名
  • 电力系统的虚假数据注入攻击和MTD系统研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 智能电网的深度融合 提升了电网的整体调度能
  • 【代码】python调用api示例

    调用api的基本步骤如下 1 导入requests库 这是一个常用的发送和处理http请求的库 2 创建一个请求对象 指定请求的url 方法 参数 头部等信息 3 发送请求 获取响应对象 4 检查响应的状态码 内容 格式等信息 5 如果响应
  • linux下gz和tar.gz、zip压缩解压

    文章目录 说明 分享 tar gz 常用命令 gz 常用命令 zip 常用命令 总结 说明 本博客每周五更新一次 日常数据处理中 经常需要压缩数据文件 减小传输带宽 方便分享和存储 整理gz tar gz zip三种格式 一般场景中的压缩解
  • niginx 配置代理websokcet

    server listen 80 server name xxx xxx cn client max body size 20m location proxy redirect off proxy set header Host host
  • C++写csv文件

    代码如下 include
  • ubuntu 如何放开端口

    在 Ubuntu 上放开端口 可以通过以下步骤进行操作 使用 root 用户或具有管理员权限的用户登录到 Ubuntu 系统 使用防火墙工具 如ufw 放开特定的端口 ufw 是 Ubuntu 上的一个简化的防火墙配置工具 可以轻松管理端口
  • JS阻止事件冒泡的3种方法

    什么是JS事件冒泡 在一个对象上触发某类事件 比如单击onclick事件 如果此对象定义了此事件的处理程序 那么此事件就会调用这个处理程序 如果没有定义此事件处理程序或者事件返回true 那么这个事件会向这个对象的父级对象传播 从里到外 直
  • 小技巧粗讲 - 用栈实现括号匹配的判断

    Codeforces上有一道我曾经讲过的题 买看过的小伙伴看这个链接 https blog csdn net ericgipsy article details 79980874 然后再来一道题 http www fjutacm com P