Parentheses Balance UVA - 673
在网上看了很多题解,没看到用map做的(可能是我没找到吧)。其实用map可以少用很多if语句!
#include<cstdio>
#include<map>
#include<cstring>
#include<stack>
#include<iostream>
using namespace std;
int main()
{
int n, i, l;
char data[130];
map<char, int> m;
m.insert(pair<char, int>('[', 1));
m.insert(pair<char, int>(']', -1));
m.insert(pair<char, int>('(', 2));
m.insert(pair<char, int>(')', -2));
scanf("%d", &n);
getchar();
while (n--)
{
/*fgets(data, 129, stdin);*/
gets(data);
l = strlen(data);
stack<char> s;
s.push('1');
for (i = 0; i < l; i++)
{
//printf("%c ",data[i]);
if (m[s.top()] + m[data[i]] == 0 && m[data[i]] < 0)//应该是[ 对 ]的,而不是[ 对 [ ,另外要考虑到 ][
s.pop();
else
s.push(data[i]);
//printf("s.size()=%d ", s.size());
}
//printf("s.size()=%d ", s.size());
if (s.size() == 1)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}