括号配对问题
时间限制:
3000
ms | 内存限制:
65535
KB
难度:
3
-
描述
- 现在,有一行括号序列,请你检查这行括号是否配对。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <stack>
using namespace std;
const int maxn = 10005;
char str[maxn];
stack <char> s;
int main()
{
int T;
scanf("%d", &T);
getchar();
while(T--)
{
scanf("%s", str);
int len = strlen(str);
if(len % 2)
printf("No\n");
else
{
for(int i = 0; i < len; i++)
{
if(s.empty()) s.push(str[i]); //这一步千万不能掉了,不然一直runtime error
else
{
if((s.top() == '[' && str[i] == ']') || (s.top() == '(' && str[i] == ')'))
s.pop();
else
s.push(str[i]);
}
}
if(!s.empty()){
printf("No\n");
while(!s.empty())
s.pop();
}
else
printf("Yes\n");
}
}
return 0;
}