Parentheses Balance(stack)

原创 2018年04月17日 19:08:18

Parentheses Balance

 

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. Yourprogram can assume that the maximum string length is 128.InputThe file contains a positive integer n and a sequence of n strings of parentheses ‘()’ and ‘[]’, one stringa line.OutputA sequence of ‘Yes’ or ‘No’ on the output file.

Sample Input

3

([])

(([()])))

([()[]()])()

Output

Yes

No

Yes

题意:判断括号是否匹配

思路:栈的应用

AC代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<stack>
using namespace std;

bool judge(char c1,char c2)
{
    if(c1=='('&&c2==')')return 1;
    if(c1=='['&&c2==']')return 1;
    return 0;
}
int main()
{
    int T;
    char str[150];
    cin>>T;getchar();
    while(T--){
        stack<char> s;
        gets(str);
        int leap=1,flag=0,cntl=0,cntr=0;
        int len = strlen(str);
        //如果为空串,返回Yes
        if(len==0){cout<<"Yes"<<endl;continue;}
        //如果向左的括号与向右的括号数量不一致,返回No
        for(int i=0;i<len;++i){
            if(str[i]=='('||str[i]=='[')    cntl++;
            else cntr++;
            if(cntr>cntl) {flag=1;break;} //判断类似:))((
        }
        if(flag==1||cntl!=cntr){cout<<"No"<<endl;continue;}
        //将向右的括号入栈,与向左的比较
        for(int i=0;i<len;++i){
            if(str[i]=='('||str[i]=='['){
                s.push(str[i]);
            }
            else if(!s.empty()){
                if(judge(s.top(),str[i])){
                    s.pop();
                    continue;
                }
                else{
                    leap=0;
                    break;
                }
            }

        }
        if(leap)  cout<<"Yes"<<endl;
        else      cout<<"No"<<endl;
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangxiaoduoduo/article/details/79979197

Parentheses Balance——括号匹配

Parentheses Balance  You are given a string consisting of parentheses () and []. A stri...
  • A_Happy_ACMer
  • A_Happy_ACMer
  • 2015-01-23 08:50:43
  • 467

UVA Parentheses Balance

题目如下: Parentheses Balance You are given a string consisting of parentheses () and []. A string ...
  • u013840081
  • u013840081
  • 2014-05-09 19:08:16
  • 911

UVA 673-Parentheses Balance

UVA 673-Parentheses Balance题目大意:1 A =[]或()算正确 2 A为BC(B,C都是正确的话)算正确 3 A = [M]或(M)(M为正确的话)算正确解题思路:用栈存(...
  • ZeroLH00
  • ZeroLH00
  • 2016-07-22 17:13:41
  • 128

Valid Parentheses基本方法和几种优质解法解析

今天所做的习题是LeetCode20,Valid Parentheses,有很大的收获。 第一个想到的就是利用栈 先从左到右遍历字符串,找到所有的左部放到栈中, 再从右到左遍历字符串,找到所有的...
  • yinyanting1
  • yinyanting1
  • 2017-02-19 09:17:09
  • 160

Uva - 673 - Parentheses Balance

用栈就搞定了,忘了刚开始会出现 )) ,]] 这种情况,没有加栈非空的条件,结果RE了好几次,智商太拙计。 AC代码: #include #include #include #include...
  • zyq522376829
  • zyq522376829
  • 2015-06-18 19:05:50
  • 437

Parentheses Balance UVA - 673

问题类型:stack,极简主义代码~ 问题链接 03pie’s solution for [UVA-673]: #include using namespace std; int main(...
  • qq_34677945
  • qq_34677945
  • 2017-05-09 14:09:18
  • 162

Uva 673 Parentheses Balance 平衡的括号

You are given a string consisting of parentheses () and []. A string of this type is said to be corr...
  • wb129945130
  • wb129945130
  • 2015-07-22 17:14:12
  • 217

uva673 Parentheses Balance(模拟+栈)

题意:判断给定的括号是否匹配平衡。 思路:用栈来模拟 遇到'(' 或'['的时候入栈, 遇到 ')'或']'跟栈定匹配。匹配成功则栈顶出栈。 最后栈空则括号平衡。陷阱: 小心))))))))...
  • MistKafka
  • MistKafka
  • 2013-07-25 19:13:27
  • 1954

UVa 673 Parentheses Balance (stack)

题目描述 : 判断字符串是不是符合正确的表达式形式。 要点 : 考虑字符串为空的时候,用getline输入,每一次判断后如果为No则要清空栈。对称思想。              注意输入格式。 ...
  • wxisme
  • wxisme
  • 2014-12-04 15:40:52
  • 341

LeetCode_Stack_Valid Parentheses

Vaild Parentheses leetcode 问题描述: 给定一个字符串包括题目所说的一堆括号,判断此字符串是否有效。有效的条件是去掉除括号外其余字符串,这些括号必须 成对相邻 出现。 解决思...
  • glDemo
  • glDemo
  • 2015-06-27 21:57:01
  • 539
收藏助手
不良信息举报
您举报文章:Parentheses Balance(stack)
举报原因:
原因补充:

(最多只允许输入30个字)