匹配
来源:互联网 发布:.net mvc 商城源码 编辑:程序博客网 时间:2024/06/03 00:23
实验任务
小光头解开了老鼠的难题,老鼠很高兴,告诉他们,他们需要打败控制这个森林的大魔王才能走出这片森林。如果小光头能再帮他解开一个难题,他就告诉小光头去哪里找这个大魔王。
问题是这样的,老鼠给了一串由由(,),[,],{,},<,>构成的一个括号字符串,判断这个字符串左右括号是否匹配。
数据输入
输入包括多组数据,每组数据只有一行括号字符串,其长度不大于 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
- 匹配.
- 匹配
- 匹配
- 匹配
- 匹配
- 匹配
- 匹配
- 完全匹配-最小匹配
- 完全匹配-最大匹配
- 二分匹配--行列匹配
- 文件匹配 * ? [ ] [! ]文件匹配 * ? [ ] [! ]
- nginx精准匹配, 一般匹配, 正则匹配
- 匹配 邮箱
- 正则匹配
- 模式匹配
- 正则匹配
- 括号匹配
- 括号匹配
- JSTL标签之<c:choose><c:when><c:otherwise>标签
- 对数据进行统计分析
- R语言week2note
- byte数组和String转换
- 获取指定进程的路径-支持32位和64位
- 匹配
- 我的linux学习之路第一章之Ubuntu的安装
- epoll机制:epoll_create、epoll_ctl、epoll_wait、close
- swift用RBG颜色设置自定义颜色
- poj2104 线段树+二分搜索
- 程序员——Java概述
- 杭电2026首字母变大写
- UVa 10763 Foreign Exchange
- http://www.chinaamuse.com/board/member/Enterprise/show_news.aspx?Art_ID=20153703235330 http://nanch