UVA-673 括号匹配--栈

来源:互联网 发布:广电网络面临的形势 编辑:程序博客网 时间:2024/06/05 12:04

       如果是一个合法的序列,每对配对的括号的两个字符(‘(’ 和 ')' 或者 '[' 和 ']')一定是相邻的,每次判断下该字符是否有配对即可。

       如果配对,将左括号出栈即可。特别注意:空格也是合法的。

AC代码:

#include<cstdio>#include<stack>using namespace std;const int maxn = 200;char str[maxn];stack<char>s;bool Balance(){    char ch;    for(int i = 0; str[i] != '\n'; ++i){        if(str[i] == ' ') continue;        if(!s.empty()) {            ch = s.top();            if(ch == '(' && str[i] == ')' || ch == '[' && str[i] == ']') s.pop();            else s.push(str[i]);        }        else s.push(str[i]);    }    if(s.empty()) return true;    else while(!s.empty()) s.pop();    return false;}int main(){    int T;    scanf("%d", &T);    getchar();    while(T--){        fgets(str, sizeof(str), stdin);        if(Balance()) printf("Yes\n");        else printf("No\n");    }    return 0;}

如有不当之处欢迎指出!


0 0
原创粉丝点击