2386 - 表达式括号匹配
时间限制 : 1 秒
内存限制 : 128 MB
假设一个表达式有英文字母(小写)和数字、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。
题目输入
输入文件包括一行数据,即表达式,
题目输出
输出文件包括一行,即“YES” 或“NO”。
输入/输出样例
输入格式
2*(x+y)/(1-x)@
输出格式
YES
C语言解答
#include<stdio.h> #include<string.h> int main(void) { int left=0,right=0,t=0; char string[300]; scanf("%s",string); for(int i=0;i<strlen(string);i++) { if(string[i]=='(') { left++; t++; } if(string[i]==')') { right++; if(t)t--; } } if(left==right&&t==0) printf("YES\n"); else { printf("NO\n"); } }
C++解答
#include<iostream> #include<cstring> #include<cstdio> using namespace std; string s; bool my_judge(string); int main() { //freopen("stack10.in","r",stdin); //freopen("stack10.out","w",stdout); getline(cin,s); if(my_judge(s))cout<<"YES"<<endl; else cout<<"NO"<<endl; return 0; } bool my_judge(string c) { int top=0,i=0; while(c[i]!='@') { if(c[i]=='(')top++; if(c[i]==')') { if(top>0)top--; else return false; } ++i; } if(top==0)return true; else return false; }
Python解答
# coding=utf-8 import queue s=queue.LifoQueue() x=input() for c in x: if c=='(': s.put(c) elif c==')': if not s.empty(): s.get() else: s.put(1) break if s.empty(): print('YES') else: print('NO')