输入一个包含“()”和“[]”的括号序列,判断是否合法。 具体规则:
1.空串合法;
2.如果A和B合法,那么AB合法;
3.如果A合法(A)和[A]都合法
输入输出样例
输入 #1
3
([])
(([()])))
([()])()
输出 #1
Yes
No
Yes
AC代码
#include <bits/stdc++.h>
using namespace std;
int main()
{
stack<char> s;
int n;
cin >> n;
getchar();
char c;
string str;
for (int i = 0; i < n; i++)
{
while (!s.empty())
s.pop();
int flag = 1;
getline(cin, str);
for (int j = 0; j < str.length(); j++)
{
c = str[j];
if (c == '(' || c == '[' || c == ' ')
{
if (c != ' ')
s.push(c);
}
else
{
if (c == ')')
{
if (!s.empty() && s.top() == '(')
{
s.pop();
}
else
{
flag = 0;
}
}
else
{
if (!s.empty() && s.top() == '[')
{
s.pop();
}
else
{
flag = 0;
}
}
}
}
if (!s.empty())
flag = 0;
if (flag)
cout << "Yes" << endl;
else
cout << "No" << endl;
}
return 0;
}