匹配

实验任务

小光头解开了老鼠的难题,老鼠很高兴,告诉他们,他们需要打败控制这个森林的大魔王才能走出这片森林。如果小光头能再帮他解开一个难题,他就告诉小光头去哪里找这个大魔王。

问题是这样的,老鼠给了一串由由(,),[,],{,},<,>构成的一个括号字符串,判断这个字符串左右括号是否匹配。

数据输入

输入包括多组数据,每组数据只有一行括号字符串,其长度不大于 10000。

数据输出

对于每组数据,若匹配则输出“Yes“,否则输出“No”。

输入示例

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

输出示例

No
No
Yes

解题思路

栈的简单运用,如果当前括号与栈顶中的括号相匹配,则栈顶括号出栈,否则当前括号入栈。若最终是空栈,则说明所有括号都是匹配的。

参考代码

C版本:

#include <stdio.h>  
#include <string.h>  
#define maxn 10010  
typedef struct{  
    char data[maxn];  
    int top;  
}stack;  
stack st, *s=&st;  
char m[128],str[maxn];  

void Push(char c){s->top ++;s->data[s->top] = c;}  
void Pop(){s->top--;}  
char Top(){return s->data[s->top];}  

int main()  
{  
    m[')'] = '(',m[']'] = '[';    
    m['}'] = '{',m['>'] = '<';  
    while (scanf("%s",str) != EOF){  
        Push('#');  
        int len = strlen(str);  
        for (int i = 0;i < len;i++){  
            if (m[str[i]] == Top())  
                Pop();  
            else  
                Push(str[i]);  
        }  
        printf("%s\n",(Top() == '#')?"Yes":"No");   
    }  
    return 0;  
}

C++版本

#include <iostream>  
#include <string>  
#include <map>  
#include <stack>  
using namespace std;  
map<char,char> m;  //映射
int main()  
{  
    m[')'] = '(',m[']'] = '[';  
    m['}'] = '{',m['>'] = '<';  
    string str;  
    while(cin >> str){  
        stack<char> s;  
        s.push('#');  
        for (int i = 0;i < str.size();i++){  
            if(m[str[i]] == s.top())  
                s.pop();  
            else  
                s.push(str[i]);  
        }  
        printf("%s\n",(s.top() == '#')?"Yes":"No");               
    }  
    return 0;  
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值