匹配平衡的括号
Sample Input
3
([])
(([()])))
([()])()Sample Output
Yes
No
Yes
思路
用栈
遇到左括号 ‘(’ 或 ‘[’ 入栈
遇到右括号 ‘)’ 或 ‘]’ 则查找栈顶元素 , 若匹配则栈顶弹出
最后检查栈是否为空
AC代码
#include <iostream>
#include <cstdio>
#include <stack>
using namespace std;
stack<char> s;
int main()
{
int T;
char ch;
scanf("%d",&T);
getchar();
while( T-- )
{
int flag = 1;
while( ( ch = getchar() ) && ch != '
' ){
if( ch == '(' || ch == '[' ) s.push(ch);
if( ch == ')' ){
if( s.size() && s.top() == '(' ) s.pop();
else flag = 0;
}
if( ch == ']' ) {
if( s.size() && s.top() == '[' ) s.pop();
else flag = 0;
}
}
if( s.size() == 0 && flag ) puts("Yes");
else{
puts("No");
while( s.size() )
s.pop();
}
}
return 0;
}