括号匹配 分类: 栈和队列 2015-06-09 10:28 15人阅读 评论(0) 收藏

数据结构实验之栈四:括号匹配

TimeLimit: 1000ms Memory limit: 65536K 有疑问?点这里^_^

题目描述

给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的() ,[ ],{ }是否匹配。

输入

输入数据有多组,处理到文件结束。

输出

如果匹配就输出“yes”,不匹配输出“no”

示例输入

sin(20+10)

{[}]

示例输出

yes

no

#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <cstdio>
#include <cctype>
#include <vector>
#include <string>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define INF 0x3f3f3f3f
using namespace std;
int trans(char s)
{
    if(s=='[')
        return 1;
    if(s==']')
        return 6;
    if(s=='{')
        return 2;
    if(s=='}')
        return 5;
    if(s=='(')
        return 3;
    if(s==')')
        return 4;
    return 0;
}
int main()
{
    char str[100];
    int s[110];
    while(gets(str))
    {
        int len=strlen(str);
        int ans,top=0;
        bool flag=true;
        for(int i=0; i<len; i++)
        {
            ans=trans(str[i]);
            if(ans)
            {
                if(ans<=3)
                {
                    s[++top]=ans;
                }
                else
                {
                    if(top&&s[top]+ans==7)
                    {
                        top--;
                    }
                    else
                    {
                        flag=false;
                        break;
                    }
                }
            }
        }
        if(top||!flag)
        {
            printf("no\n");
        }
        else
        {
            printf("yes\n");
        }
    }
    return 0;
}
STL
#include <map>
#include <set>
#include <cmath>
#include <stack>
#include <queue>
#include <cstdio>
#include <cctype>
#include <vector>
#include <string>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define RR freopen("input.txt","r",stdin)
#define WW freopen("output.txt","w",stdout)
#define INF 0x3f3f3f3f

using namespace std;

int trans(char s)
{
    if(s=='[')
        return 1;
    if(s==']')
        return 6;
    if(s=='{')
        return 2;
    if(s=='}')
        return 5;
    if(s=='(')
        return 3;
    if(s==')')
        return 4;
    return 0;
}
int main()
{
    char str[100];
    while(gets(str))
    {
        int len=strlen(str);
        int ans;
        bool flag=true;
        stack<int>s;
        for(int i=0; i<len; i++)
        {
            ans=trans(str[i]);
            if(ans)
            {
                if(ans<=3)
                {
                    s.push(ans);
                }
                else
                {
                    if(!s.empty()&&s.top()+ans==7)
                    {
                        s.pop();
                    }
                    else
                    {
                        flag=false;
                        break;
                    }
                }
            }
        }
        if(!s.empty()||!flag)
        {
            printf("no\n");
        }
        else
        {
            printf("yes\n");
        }
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-06-09 10:28  一骑绝尘去  阅读(117)  评论(0编辑  收藏  举报