其实就是括号匹配,用堆栈解决就行了,开始时没有考虑清楚,用两个堆栈分别存储()和[],后来发现这样有bug,因为像([)]这样的字符串判断就会出错。
#include <stdio.h>
#include <stack>
#include <string.h>
using namespace std;
char buffer[1000];
stack<char> s;
void func()
{
int i;
while(!s.empty()) s.pop();
for(i=0; i<strlen(buffer); i++)
{
switch(buffer[i])
{
case '(':
s.push('(');
break;
case ')':
if(!s.empty() && s.top()=='(')
{
s.pop();
}
else
{
printf("No\n");
return;
}
break;
case '[':
s.push('[');
break;
case ']':
if(!s.empty() && s.top()=='[')
{
s.pop();
}
else
{
printf("No\n");
return;
}
break;
}
}
if(s.empty())
printf("Yes\n");
else
printf("No\n");
}
int main(void)
{
int n;
gets(buffer);
sscanf(buffer, "%d", &n);
while(n--)
{
gets(buffer);
func();
}
return 0;
}