【UVA 673 Parentheses】 & 栈

来源:互联网 发布:金博宝芝林软件破解版 编辑:程序博客网 时间:2024/06/05 14:31

You are given a string consisting of parentheses () and []. A string of this type is said to be correct:
(a) if it is the empty string
(b) if A and B are correct, AB is correct,
(c) if A is correct, (A) and [A] is correct.
Write a program that takes a sequence of strings of this type and check their correctness. Your
program can assume that the maximum string length is 128.
Input
The file contains a positive integer n and a sequence of n strings of parentheses ‘()’ and ‘[]’, one string
a line.
Output
A sequence of ‘Yes’ or ‘No’ on the output file.
Sample Input
3
([])
(([()])))
([()])()
Sample Output
Yes
No
Yes

题意 : 检查给出的字符串是否括号配对

思路 : 栈存左括号,遇到右括号配对,空字符串也为 Yes

AC代码:

#include<cstdio>#include<cmath>#include<deque>#include<stack>#include<iostream>#include<queue>#include<vector>#include<cstring>#include<algorithm>using namespace std;const int MAX = 1e5 + 10;const int INF = 1e9 + 7;typedef long long LL;string s;int nl;int main(){    int n;    scanf("%d",&n);    getchar();    while(n--){        getline(cin,s);        if(s.size() == 0){            puts("Yes");            continue;        }        int ok = 1;        stack <char> q;        for(int i = 0; i < s.size(); i++)            if(s[i] == '(' || s[i] == '[')                q.push(s[i]);            else{                if(q.empty()){                    ok = 0; break;                }                char o = q.top();                q.pop();                if(s[i] == ')' && o != '(') ok = 0;                if(s[i] == ']' && o != '[') ok = 0;                if(!ok) break;            }            if(ok && q.empty()) puts("Yes");            else puts("No");        }    return 0;}