需要用到栈的知识,但是并不是很难,是一道很不错的栈的入门题。这是我看的别人的,关于栈和队列的讲解。看完之后,可能感觉这和这个题有什么关系,不要着急,慢慢来。
我们可以把这个看成一个栈,一个一个的往栈里加入括号字符“push()”,每进行一次输入,都判断一次栈是否为空,如果为空,直接进栈,做栈顶,如果不为空,判断一下,能否和栈顶配对,如果可以,把栈顶pop()掉,如果不能配对,就进栈。到最后,如果栈为空,说明全部都配对了,否则配对失败。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<stack>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
char a[11000];
stack<char> q;
scanf("%s",a);
for(int i=0;i<strlen(a);i++)
{
if(q.empty())
{
q.push(a[i]);
}
else if(a[i]==')'&&q.top()=='(')
{
q.pop();
}
else if(a[i]==']'&&q.top()=='[')
{
q.pop();
}
else
{
q.push(a[i]);
}
}
if(q.empty())
{
printf("Yes\n");
}
else
{
printf("No\n");
}
}
return 0;
}