You are given astring consisting of parentheses () and []. A string of this type is said to be correct:
(a)
if it is the empty string
(b)
if A and B are correct, AB is correct,
(c)
if A is correct, (A) and [A] iscorrect.
Write a programthat takes a sequence of strings of this type and check their correctness. Yourprogram can assume that the maximum string length is 128.
The file contains a positive integer n and a sequenceof n strings of parentheses () and [], one string a line.
A sequence of Yes or No on the output file.
3
([])
(([()])))
([()[]()])()
Yes
No
Yes
#include<iostream>
#include<stack>
#include<cstring>
#include<cstdio>
using namespace std;
bool judge(char a,char b)
{
if(a=='['&&b==']')return 1;
if(a=='('&&b==')')return 1;
return 0;
}
bool left(char a)
{
if(a=='['||a=='(')return 1;
return 0;
}
int main()
{
int cas;
char s[200];
cin>>cas;
getchar();
while(cas--)
{
stack<char>q;
gets(s);
if(strcmp(s,"\n")==0)
{
cout<<"Yes"<<endl;
continue;
}
for(int i=0;s[i];i++)
{
if(q.empty())
{
q.push(s[i]);
}
else if(!judge(q.top(),s[i]))
{
if(left(s[i]))
q.push(s[i]);
}
else q.pop();
}
if(q.empty())cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}