经典的括号匹配问题。
遇到匹配的括号则出栈,否则匹配失败退出循环,最后若没有匹配失败的情况且栈为空输出yes,否则输出no。
map<char,char> mp;
int main()
{
mp['(']=')';
mp['[']=']';
mp['{']='}';
int T;
cin>>T;
while(T--)
{
stack<char> stk;
string s;
cin>>s;
bool ok=true;
for(int i=0;i<s.size();i++)
if(s[i] == '(' || s[i] == '[' || s[i] == '{')
stk.push(s[i]);
else if(s[i] == ')' || s[i] == ']' || s[i] == '}')
{
if(stk.size() && mp[stk.top()] == s[i])
stk.pop();
else
{
ok=false;
break;
}
}
if(!ok || !stk.empty()) puts("no");
else puts("yes");
}
//system("pause");
return 0;
}