• ACM平衡的括号


    Description

    Download as PDF
     

    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, () and [] 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 

    #include <iostream>
    #include <cstdio>
    #include <string.h>
    #include <stack>
    using namespace std;
    int main()
    {
        char s[150];
        int n;
        cin>>n;
        getchar();
        while(n--)
        {
            gets(s);
            stack<char>v;
            if(strlen(s)==0)
            {
                cout<<"Yes"<<endl;
                continue;
            }
            for(int i=0;i<strlen(s);i++)
            {
                if(s[i]=='('||s[i]=='['||(v.empty()))
                    v.push(s[i]);
                else
                {
                    if((s[i]==')'&&v.top()=='(')||(s[i]==']'&&v.top()=='['))
                        v.pop();
                    else
                        v.push(s[i]);
                }
            }
            if(v.size())
                cout<<"No"<<endl;
            else
                cout<<"Yes"<<endl;
                    
        }
        return 0;
    }

     

     

    Yes
    No
    Yes
    

     解题思路:这个问题推荐用栈来解决,我们小建立一个字符数组用来存储从外面输入进来的字符串。对于'( '和' [ '的字符以及当栈是空的时候我们就往栈里面存放字符,否则如果此时要存入的字符是')'(且栈的顶部的元素是'(')或‘ ]‘(此时的栈的顶部的元素是'[')我们就把栈的顶部的元素拿出栈,否责就继续把字符存入栈。最后我们判断栈是空的还是满的,我们就能确定我们输入的字符串是不是平衡的了;如果栈是空的,我们就输出Yes,表示这个字符串是平衡的,否则输出No。在这个题目中我们还应该注意的是当输入的字符串是空的时候,这时的字符串也是平衡的。

     

  • 相关阅读:
    XidianOJ 1073 Nunchakus
    XidianOJ 1024 2的幂次表示
    XidianOJ 1072 National Disaster
    XidianOJ 1093 一元三次方程
    中国剩余定理
    bzoj2818(欧拉函数递推)
    poj2311(博弈论,sg函数)
    contesthunter#46-A(分块)
    Tree,点分治
    poj3580(splay 毒瘤题)
  • 原文地址:https://www.cnblogs.com/xinxiangqing/p/4669649.html
Copyright © 2020-2023  润新知