UVa 673

匹配平衡的括号

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;
}
原文地址:https://www.cnblogs.com/JinxiSui/p/9740637.html