- 题目大意
给出两个字符()【】,然后根据给的条件来判断。
- 解题思路
根据给的三个条件,然后利用栈来处理,对于暂时没有后括号匹配的前括号压入栈,遇到后括号时看栈顶的前括号与其是否匹配,如果匹配则弹出该前括号。还要判断下最后栈里面是不是有剩下的没有匹配的前括号。(注意空字符也行)
- 代码
#include<iostream>
#include<stack>
#include<cstring>
using namespace std;
int main()
{
int x;
char c[200];
cin >> x;
getchar();
while (x--)
{
stack<char>num;
gets(c);
if (strcmp(c, "\n") == 0)
{
cout << "Yes" << endl;
continue;
}
int a = strlen(c);
for (int i = 0; i<a; i++)
{
if (c[i] == ‘(‘||c[i]==‘[‘)
{
num.push(c[i]);
continue;
}
else if (num.empty())
{
num.push(c[i]);
}
else if (c[i] == ‘)‘&&num.top()==‘(‘|| c[i] == ‘]‘&&num.top() == ‘[‘)
{
num.pop();
}
else
{
num.push(c[i]);
break;
}
}
if (num.empty())
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}