首页 > 其他分享 >数据结构,问题 G: 字符串匹配问题

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

时间:2024-11-05 11:49:54浏览次数:4  
标签:NO mmp st 问题 括号 字符串 YES 数据结构 输入

题目描述

字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。如果括号有互相包含的形式,从内到外必须是<>,(),[],{},例如。输入: [()] 输出: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;
}

标签:NO,mmp,st,问题,括号,字符串,YES,数据结构,输入
From: https://blog.csdn.net/nick_912912/article/details/143456120

相关文章

  • 字节AI产品面经|反反复复,无非这100个问题
    很多转行、求职的同学都会被突然提出的技术问题打的不知所措:总结一下大家遇到的问题1、AI相关的应用、技术和落地相关的准备不是很充分,很容易被问倒。、2、不知道大模型构建流程是怎么样的,每个节点产出物是什么,以及上下游关系;3、不了解AI技术的边界,也不懂基本的算法技......
  • 解决linux将csv连入mysql数据库的问题
    创建一个csv文件路径在/opt/module/data/123.csv0.登入数据库:mysql-uroot-p123456root是用户名 123456是密码1.使用数据库(user库[自己创建的库])(以下都是mysql操作)useuser;2.在mysql数据库中创建对应表(最好别设置主键和限制,csv数据不一定干净)create tablestud......
  • AI运动小程序开发常见问题集锦二
    截止到现在写博文时,我们的AI运动识别小程序插件已经迭代了23个版本,成功应用于健身、体育、体测、AR互动等场景;为了让正在集成或者计划进行功能扩展优化的用户,少走弯路、投入更少的开发资源,针对近期的咨询问题,我们又归集了一些常见问题,供大家参考。一、计时、计数计量模式有什么......
  • 数据结构 ——— 计算链式二叉树叶子节点的个数以及计算链式二叉树的高度
    目录前言链式二叉树示意图​编辑手搓一个链式二叉树计算链式二叉树的叶子节点个数计算链式二叉树的高度 前言上一章学习了计算链式二叉树的节点个数数据结构———计算链式二叉树节点的个数-CSDN博客接下来学习的是计算链式二叉树叶子节点的个数以及计算链式二叉......
  • 《图解设计模式》 第五部分 访问数据结构
    第十三章Visotor模式publicclassfileextendsentry{/*省略*/puhblicvoidaccept(Visitorv){v.visit(this);}}publicclassMain{publicstaticvoidmain(Stringargs){Directoryrootdir=newDirctory("root");/*省略*/ro......
  • 红黑树的平衡之舞:数据结构中的优雅艺术
    文章目录前言......
  • 解决Android Studio项目初始化下载gradle过慢问题
    解决方法将谷歌官方源替换为国内阿里云或者腾讯云源解决方案替换掉谷歌原地址:官网地址:https://services.gradle.org/distributions/阿里云镜像Gradle下载地址:https://mirrors.aliyun.com/macports/distfiles/gradle/腾讯镜像Gradle下载地址:https://mirrors.cloud.tencent......
  • 数据结构 -AVL Tree
    博客主页:【夜泉_ly】本文专栏:【数据结构】欢迎点赞......
  • Redis底层数据结构 SDS
    SDS字符串在Redis中是很常用的,键值对中的键是字符串类型,值有时也是字符串类型。Redis是用C语言实现的,但是它没有直接使用C语言的char*字符数组来实现字符串,而是自己封装了一个名为简单动态字符串(simpledynamicstring,SDS)的数据结构来表示字符串,也就是Redis的Stri......
  • vue项目接入CDN域名:你可能会碰到的问题
    背景项目需要接入cdn加速域名,但只能在生产环境验证。所以发版之前本地先准备好cdn的包,然后发版的时候部署到生产环境,结果发现,点击菜单后页面的URL不对了,静态资源加载是可以的。本来页面URL是这样的:test.com/app/xpg/ind…但点击菜单后,把cdn的域名加上去了:test.com/https://c......