UVA673Parentheses Balance

来源:互联网 发布:海康威视管理端口设置 编辑:程序博客网 时间:2024/06/03 08:39

UVA-673

题意:1)空串为真 , 2)若字符串A为真,则(A) [A]都为真。3)字符串A和B都真,则字符串AB为真。求给出的串是否为真
解题思路:其实就是求括号的匹配问题。写一个栈,遇到 ( 和 [ 进栈,遇到 ) 和 ] 就和栈顶比较,匹配就栈顶出栈。最后栈为空就是匹配,非空就是不匹配。

/*************************************************************************    > File Name: UVA-673.cpp    > Author: Narsh    >     > Created Time: 2016年07月16日 星期六 10时10分48秒 ************************************************************************/#include <iostream>#include <algorithm>#include <cstdio>#include <cstring>using namespace std;int n,m,l,t;string s;char c[600000];int main () {    scanf("%d\n",&t);    c[0]=' ';    while (t--) {        getline(cin,s);        n=s.length();        s=" "+s;        bool tag=true;        l=0;        for (int i = 1; i <= n; i++) {            if (s[i] == '(' || s[i] == '[') {                l++;                c[l] = s[i];            }else if(l && ((c[l] == '(' && s[i] == ')') || (c[l] == '[' && s[i] == ']'))) l--;            else {                l++;                c[l]=s[i];            }        }        if (!l) printf("Yes\n");        else printf("No\n");    }}
0 0
原创粉丝点击