每个测试文件均包含多组测试数据。第一行输入一个整数
代表数据组数,每组测试数据描述如下:
在一行上输入一个长度为
,仅由上述四类括号组成的括号表达式
。
除此之外,保证单个测试文件的
之和不超过
。
对于每一组测试数据,新起一行。如果表达式是合法的,输出
;否则输出
。
5
{[(<>)]}
[()]
<>()[]{}
[{}]
{()}YES YES YES NO YES
本题已于下方时间节点更新,请注意题解时效性:
1. 2025-11-13 优化题面文本与格式。原数据存在空白行,重造数据。
#include <iostream>#include<string>#include<vector>using namespace std;void isvaild(const string &s){int x;vector<int>st;for(char c : s){if(c=='{'||c=='}')x=4;else if(c=='['||c==']')x=3;else if(c=='('||c==')')x=2;else if(c=='<'||c=='>')x=1;else {cout<<"NO"<<endl;return ;}if(c=='{'||c=='['||c=='('||c=='<'){if(!st.empty()&&st.back()<x){cout<<"NO"<<endl;return ;}st.push_back(x);//检验是否匹配}else{if(!st.empty()&&st.back()!=x){cout<<"NO"<<endl;return ;}st.pop_back();}}if(st.empty())cout<<"YES"<<endl;else cout<<"NO"<<endl;}int main(){int n;cin>>n;string v;for(int i=0;i<n;i++){cin>>v;isvaild(v);}}