当前位置: 首页 > article >正文

数据结构,问题 G: 字符串匹配问题

题目描述

字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出:YES,而输入([]), ([])都应该输出NO。

输入

文件的第一行为一个整数n(0<n<20),表示以下有多少个由括号组成的字符串。接下来的n行,每行都是一个由括号组成的长度不超过255的字符串。

输出

在输出文件中有N行,每行都是YES或NO。

样例输入 复制
5
{}{}<><>()()[][]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{{}}{{}}<<>><<>>(())(())[[]][[]]
{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
><}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]
样例输出 复制
YES
YES
YES
YES
NO
题解 

在做括号匹配一类题目需要注意的点:

  • 在读到右括号选择出栈前要判断栈是否为空
  • 在拿出栈顶做某些判断前判断栈是否为空
  • 在多类右括号问题中,在读取右括号出栈时需要判断栈顶左括号是否匹配
  • 清空st栈 : 
stack<char> ().swap(st);
代码
题解 
#include<bits/stdc++.h>
using namespace std;

stack<char> st;

int main(){
	int t;cin >> t;
	map<char, int>mp;
	mp['<'] = 1;
	mp['('] = 2;
	mp['['] = 3;
	mp['{'] = 4;
	map<char, char> mmp;
	mmp['<'] = '>';
	mmp['('] = ')';
	mmp['['] = ']';
	mmp['{'] = '}';
	while(t --){
		string s;cin >> s;
		bool flag = false;
		for(char c : s){
			if(c =='(' || c == '[' || c =='<' || c =='{'){
				if(st.empty()){
					st.push(c);
				}else {
					char p = st.top();
					if(mp[p] < mp[c]){
						flag = 1;
						break;
					}else{
						st.push(c);
					}
				}
			}else{
				if(st.empty()){
					flag = 1;
					break;
				}else{
					char p = st.top();
					if(mmp[p] != c){
						flag = 1;
						break;
					}else st.pop();
				}
			}
		}
		if(!st.empty() || flag)cout << "NO" << '\n';
		else cout << "YES" << '\n';
		stack<char> ().swap(st); 
	}
	return 0;
}


http://www.kler.cn/a/376472.html

相关文章:

  • android数组控件Textview
  • 用Python设置、更新和获取Excel单元格的值
  • frameworks 之 触摸事件ANR流程
  • Python爬虫:揭开淘宝商品描述的神秘面纱
  • 测试Bug提交报告模板
  • vxe-table v4.8+ 与 v3.10+ 虚拟滚动支持动态行高,虚拟渲染更快了
  • Spring Boot接收参数的19种方式
  • DiffusionDet: Diffusion Model for Object Detection—用于对象检测的扩散模型论文解析
  • Vite常用插件配置
  • R学习笔记-单因素重复测量方差分析
  • 032_Tiledlayout_in_Matlab中的分块图布局
  • C++/Opengl编程实践
  • 代码随想录一刷——350.两个数组的交集II
  • 024集——CAD 动态显示图形——ed.Redraw(ent)实现(CAD—C#二次开发入门)
  • 初探Flink的序列化
  • centos7 zabbix监控nginx的pv和uv和status_code
  • 无法启动此程序win10玩游戏找不到d3dx9_43.dll缺失的五种常用有效解决方法
  • el-table 修改高亮行样式
  • 基于 Flask 的 Python 应用程序,主要功能包括用户认证、文件上传(CSV 和图片)、图像文字识别(OCR)以及根据识别结果进行一些数据处理和比对
  • [MySQL]DQL语句(一)
  • SRS:构建实时免费视频服务器的全方位指南
  • 使用Nginx作为Web服务器和反向代理
  • Webserver(2.4)进程控制
  • 2024 手机解压缩软件评测与推荐
  • 【ROS2】文档、教程、源码汇总
  • Android——横屏竖屏