判断括号是否匹配:给定n组数,每组为一个字符串,测试三种括号:{}()[],且顺序都是前左括号,后右括号,括号之间可以嵌套。若匹配则输出yes,否则输出no;
Input:
2
{9}[00](tt)
{[](}
Output:
yes
no
#include <stdio.h>
#include <stack>
#include <string.h>
#include <iostream>
using namespace std;
const int maxn = 20;
bool Judge(char str[][maxn], int n)
{
stack<char> s;
while(!s.empty())
{
s.pop();
}
int len = strlen(str[n]);
for(int i = 0; i < len; i++)
{
if(str[n][i] == '(' || str[n][i] == '[' || str[n][i] == '{')
{
s.push(str[n][i]);
}
else if(str[n][i] == ')')
{
if(s.empty())
{
return false;
}
else
{
char temp = s.top();
if(temp != '(')
{
return false;
}
else
{
s.pop();
}
}
}
else if(str[n][i] == ']')
{
if(s.empty())
{
return false;
}
else
{
char temp = s.top();
if(temp != '[')
{
return false;
}
else
{
s.pop();
}
}
}
else if(str[n][i] == '}')
{
if(s.empty())
{
return false;
}
else
{
char temp = s.top();
if(temp != '{')
{
return false;
}
else
{
s.pop();
}
}
}
}
return s.empty();
}
int main()
{
int n;
scanf("%d", &n);
getchar();
char str[n][maxn];
for(int i = 0; i < n; i++)
{
scanf("%s", str[i]);
getchar();
}
for(int i = 0; i < n; i++)
{
if(Judge(str, i))
{
printf("yes\n");
}
else
{
printf("no\n");
}
}
return 0;
}