下面我上传了一个代码来检查字符串中的括号是否平衡或不使用堆栈。它适用于 1 个输入,但对于多个测试用例,正确的输出不起作用。请帮助。提前致谢。
int main()
{
int t;
cin >>t;
cin.ignore();
while(t--)
{
{
stack s;
char *st;
st=new char[100];
gets(st);
s.create(strlen(st));
if(!count_elem(st))//counts if the brackets are in pairs or not
cout << "NO" <<endl;
else
func1(s,st);
}
}
return 0;
}
void func1(stack s,char *st)
{
static int i=0,flag=0;
// printf("%d %d\n",i,flag);
if(st[i]=='(' || st[i]=='{' || st[i]=='[')
{
flag=1;
s.push(st[i]);
}
else
{
if(s.isEmpty())
flag=0;
else
{
if(st[i]=='}')
{
//printf("%c\n",s.get_top());
if(s.get_top()=='{')
{
flag=1;
s.pop();
}
else
flag=0;
}
if(st[i]==')')
{
//printf("%c\n",s.get_top());
if(s.get_top()=='(')
{
flag=1;
s.pop();
}
else
flag=0;
}
if (st[i]==']')
{
//printf("%c\n",s.get_top());
if(s.get_top()=='[')
{
flag=1;
s.pop();
}
else
flag=0;
}
}
}
i++;
if(flag==1)
{
if(i<strlen(st))
func1(s,st);
else
cout << "YES"<<endl;
}
else
cout << "NO"<< endl;
}