括号配对问题

这里举了两个例子,都是用栈做的,题目很水,就不过多解释了,相信大佬们都能看懂。

(1)

 

Description

现在有一种只包括左右小括号(“(”和“)”)和空格(” “)的字符串序列,请你判断括号是否匹配,如果匹配就输出Yes,不匹配输出No。

Input

输入数据第一行输入一个T(0≤T≤100),表示测试数据的组数。

接下来有T行测试数据,每行有一个符合题意的字符串,字符串长度不超过500。

Output

每组测试数据,先输出一个”Case %d:“,%d表示第几组测试数据。接着,如果字符串括号匹配,输出Yes,否则,输出No。具体输出格式参考下面输出样例。

Sample Input

2
( ())
)(

Sample Output

Case 1:Yes
Case 2:No

代码如下:

 

#include <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
    stack<char>sk1,sk2;
    int t;
    cin>>t;
    getchar();
    for(int i=1; i<=t; i++)
    {
    	while(!sk1.empty())
			sk1.pop();
		while(!sk2.empty())
			sk2.pop();
        int flag=1;
		char a[5000];
        gets(a);
        cout<<"Case "<<i<<":";
        for(int j=0; a[j]; j++)
        {
            if(a[j]=='(')
                sk1.push(a[j]);
            else if(a[j]==')')
                if(sk1.empty()==0)
                    sk1.pop();
                else
                    sk2.push(a[j]);
        }
        if(sk1.empty()&&sk2.empty())
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}
 <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
    stack<char>sk1,sk2;
    int t;
    cin>>t;
    getchar();
    for(int i=1; i<=t; i++)
    {
    	while(!sk1.empty())
			sk1.pop();
		while(!sk2.empty())
			sk2.pop();
        int flag=1;
		char a[5000];
        gets(a);
        cout<<"Case "<<i<<":";
        for(int j=0; a[j]; j++)
        {
            if(a[j]=='(')
                sk1.push(a[j]);
            else if(a[j]==')')
                if(sk1.empty()==0)
                    sk1.pop();
                else
                    sk2.push(a[j]);
        }
        if(sk1.empty()&&sk2.empty())
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

(2)

 

Description

假设一个算术表达式中可以包含三种括号:圆括号“(”和“)”,方括号“[”和“]”和花括号“{”和“ ”,且这三种括号可按任意的次序嵌套使用(如:…[…{… …[…]…]…[…]…(…)…)。编写判别给定表达式中所含括号是否正确配对出现的算法。输出结果YES 或者 NO。

Input

5+{[2X5]+2}

Output

YES

Sample Input

8-[{2+7]}

Sample Output

NO

代码如下:

 

#include <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
    stack<char>sk1,sk2;
    int flag=1;
    char a[5000];
    gets(a);
    for(int j=0; a[j]; j++)
    {
        if(a[j]=='('||a[j]=='{'||a[j]=='[')
            sk1.push(a[j]);
        else if(a[j]==')')
            if(sk1.empty()==0&&sk1.top()=='(')
                sk1.pop();
            else
                sk2.push(a[j]);
		else if(a[j]=='}')
		    if(sk1.empty()==0&&sk1.top()=='{')
                sk1.pop();
            else
                sk2.push(a[j]);
		else if(a[j]==']')
            if(sk1.empty()==0&&sk1.top()=='[')
                sk1.pop();
            else
                sk2.push(a[j]);
    }
    if(sk1.empty()&&sk2.empty())
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
    return 0;
} <iostream>
#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
    stack<char>sk1,sk2;
    int flag=1;
    char a[5000];
    gets(a);
    for(int j=0; a[j]; j++)
    {
        if(a[j]=='('||a[j]=='{'||a[j]=='[')
            sk1.push(a[j]);
        else if(a[j]==')')
            if(sk1.empty()==0&&sk1.top()=='(')
                sk1.pop();
            else
                sk2.push(a[j]);
		else if(a[j]=='}')
		    if(sk1.empty()==0&&sk1.top()=='{')
                sk1.pop();
            else
                sk2.push(a[j]);
		else if(a[j]==']')
            if(sk1.empty()==0&&sk1.top()=='[')
                sk1.pop();
            else
                sk2.push(a[j]);
    }
    if(sk1.empty()&&sk2.empty())
        cout<<"YES"<<endl;
    else
        cout<<"NO"<<endl;
    return 0;
}

萌新代码,请多指教^_^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值