symbols匹配问题
#include<iostream>
#include<string>
using namespace std;
struct Node
{
char data;
Node*next;
};
struct LinkStack
{
Node*top;
};
LinkStack*create()
{
LinkStack*stack = new LinkStack;
stack->top = NULL;
return stack;
}
bool isEmpty(LinkStack*stack)
{
return (stack->top == NULL);
}
void pop(LinkStack*stack)
{
Node*p = stack->top;
stack->top = stack->top->next;
delete p;
}
void push(LinkStack*stack, char item)
{
Node*p = new Node;
p->data = item;
p->next = stack->top;
stack->top = p;
}
char Top(LinkStack*stack)
{
return stack->top->data;
}
int main()
{
int n;
cin >> n;
while (n-->0)
{
string s;
cin >> s;
LinkStack*stack = create();
bool flag = true;
int n = s.size();
for (int i = 0; i < n; i++)
{
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
push(stack, s[i]);
if (s[i] == ')')
{
if (!isEmpty(stack))
{
if (isEmpty(stack) && Top(stack) != '(')
{
flag = false;
break;
}
else
{
pop(stack);
}
}
else
{
flag = false;
break;
}
}
else if (s[i] == ']')
{
if (!isEmpty(stack))
{
if (Top(stack) != '[')
{
flag = false;
break;
}
else
{
pop(stack);
}
}
else
{
flag = false;
break;
}
}
else if (s[i] == '}')
{
if (!isEmpty(stack))
{
if (Top(stack) != '{')
{
flag = false;
break;
}
else
{
pop(stack);
}
}
else
{
flag = false;
break;
}
}
}
if (!isEmpty(stack))
flag = false;
if (flag)
cout << "Yes" << endl;
if (!flag)
cout << "No" << endl;
delete stack;
}
return 0;
}