SDUT 2134 数据结构实验之栈与队列四:括号匹配
2017-10-12 19:34
381 查看
数据结构实验之栈与队列四:括号匹配
Time Limit: 1000MS Memory Limit: 65536KBSubmit Statistic
Problem Description
给你一串字符,不超过50个字符,可能包括括号、数字、字母、标点符号、空格,你的任务是检查这一串字符中的( ) ,[ ],{ }是否匹配。
Input
输入数据有多组,处理到文件结束。
Output
如果匹配就输出“yes”,不匹配输出“no”
Example Input
sin(20+10)
{[}]
Example Output
yes
no
Hint
思路:这个很简单,就是只要是左括号就进栈,当碰到右括号的时候,查看和栈顶元素是不是成一对(cp)的,不是就NO,如果到最后全都能匹配就是yes。注意:最后可能栈里只剩下一些左括号,这样是不符合题意的。
#include <iostream> #include <bits/stdc++.h> using namespace std; const int MAXN=10000; char s[MAXN]; char st[MAXN]; int main() { while(gets(s)) { int top=0; int i; int l=strlen(s); for(i=0;i<l;++i) { if(s[i]=='('||s[i]=='['||s[i]=='{')st[top++]=s[i]; else if(s[i]==')'||s[i]==']'||s[i]=='}') { if(s[i]==st[top-1]+1||s[i]==st[top-1]+2) { --top; } else { break; } } } if(i==l&&!top)puts("yes"); else puts("no"); } return 0; }
不明白这段代码为什么提交会不正确-_-!
求大神指点~~~
#include<cstdio> #include<cstring> using namespace std; char str[100],po[100]; int main() { while(scanf("%s",str)!=EOF) { int len=strlen(str); int cnt=0; int i; for(i=0;i<len;i++) { if(str[i]=='('||str[i]=='['||str[i]=='{') po[cnt++]=str[i]; else if(str[i]==')'||str[i]==']'||str[i]=='}') { if(str[i]==po[cnt-1]+1||str[i]==po[cnt-1]+2) cnt--; else break; } } if(i==len&&!cnt) printf("yes\n"); else printf("no\n"); } return 0; }
相关文章推荐
- sdut 2134 数据结构实验之栈与队列四:括号匹配
- SDUT 2134 数据结构实验之栈四:括号匹配
- 2134 数据结构实验之栈与队列四:括号匹配
- [SDUT](2134)数据结构实验之栈四:括号匹配 ---栈
- 2134-数据结构实验之栈与队列四:括号匹配
- SDUT 2134 数据结构实验之栈四:括号匹配
- SDUT 2134 数据结构实验之栈四:括号匹配
- [2134]数据结构实验之栈四:括号匹配 sdutOJ
- SUDT 2134 - 数据结构实验之栈四:括号匹配
- [2134]数据结构实验之栈四:括号匹配 sdutOJ
- 2134 数据结构实验之栈四:括号匹配
- 寒假第三天--栈和队列--数据结构实验之栈四:括号匹配 (数组)
- 寒假第三天--栈和队列--数据结构实验之栈四:括号匹配 (栈)
- sdut 数据结构实验之栈四:括号匹配
- sdut 数据结构实验之栈四:括号匹配
- SDUT 2143 数据结构实验之栈四:括号匹配
- sdut 2135 数据结构实验之队列一:排队买饭
- sdut 2088 数据结构实验之栈与队列十一:refresh的停车场
- SDUT 2135 数据结构实验之队列一:排队买饭
- SDUT 3333 数据结构实验之栈与队列六:下一较大值(二)