题目描述
现在有多行括号序列,请你检查这行括号是否配对。
输入格式
第一行输入一个数 𝑛(1≤𝑛≤100)n(1≤n≤100),表示有 𝑛n 组测试数据。
其后 𝑛n 行,每行一个字符串 𝑠s (长度 𝑠≤10000,且 𝑠 不是空串)。
数据保证 𝑠 中只含有 [
, ]
, (
, )
四种字符。
输出格式
每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出 Yes
,如果不配对则输出 No
。
样例 #1
样例输入 #1
3
[(])
(])
([[]()])
样例输出 #1
No
No
Yes
代码如下
#include <bits/stdc++.h>
using namespace std;
stack <char> s;
int n;
string a;
bool chk(string a)
{
while(!s.empty())
{
s.pop();
}
int len=a.size();
for(int i=0;i<len;i++)
{
if(a[i]=='('||a[i]=='[')
{
s.push(a[i]);
}
if(a[i]==')')
{
if(s.empty())
{
return false;
}
else if(s.top()=='(')
s.pop();
else
return false;
}
if(a[i]==']')
{
if(s.empty())
{
return false;
}
else if(s.top()=='[')
s.pop();
else
return false;
}
}
if(s.empty())
{
return true;
}
else
{
return false;
}
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a;
if(chk(a))
{
cout<<"Yes"<<endl;
}
else
{
cout<<"No"<<endl;
}
}
return 0;
}