站外题求助!!全输出NO
  • 板块学术版
  • 楼主LIUYIFAN5
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/11/19 15:57
  • 上次更新2023/11/19 18:02:05
查看原帖
站外题求助!!全输出NO
1055807
LIUYIFAN5楼主2023/11/19 15:57

题目描述

字符串中只含有括号 (),[],<>,{},判断输入的字符串中括号是否匹配。

如果括号有互相包含的形式,从内到外必须是<>,(),[],{}。

例如:输入: [()] 输出Yes,而输入([])应该输出:NO。

输入

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

输出

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

样例输入

5

{}{}<><>()()[][]

{{}}{{}}<<>><<>>(())(())[[]][[]]

{{}}{{}}<<>><<>>(())(())[[]][[]]

{<>}{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

<}{{[]}<<<>><<>>>((<>))(())[[(<>)]][[]]

样例输出

YES

YES

YES

YES

NO

#include<bits/stdc++.h>
using namespace std;

string a;
int n,k[10000];
int main(){	                                
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>a;
		int ss=0;
		int t=0;
		for(int j=0;j<=a.length();j++){
			if(a[j]=='<'){
				t++;
				k[t]=1;
			}
			if(a[j]=='('){
				t++;
				k[t]==2;
				if(k[t-1]==1)ss=1;
			}
			if(a[j]=='['){
				t++;
				k[t]=3;
				if(k[t-1]==1||k[t-1]==2)ss=1;
			}
			if(a[j]=='{'){
				t++;
				k[t]=4;
				if(k[t-1]==1||k[t-1]==2||k[t-1]==3)ss=1;
			}
			if(a[j]=='>'){
				if(a[t]==1&&t>0)t--;
				else ss=1;
			}
			if(a[j]==')'){
				if(a[t]==2&&t>0)t--;
				else ss=1;
			}
			if(a[j]==']'){
				if(a[t]==3&&t>0)t--;
				else ss=1;
			}
			if(a[j]=='}'){
				if(a[t]==4&&t>0)t--;
				else ss=1;
			}
			
		}
		if(t==0&&ss==0)cout<<"YES"<<endl;
		else cout<<"NO"<<endl;
	}

}
2023/11/19 15:57
加载中...