游客 Signup | Login
中文 | En

2386 - 表达式括号匹配

      假设一个表达式有英文字母(小写)和数字、运算符(+,—,*,/)和左右小(圆)括号构成,以“@”作为表达式的结束符。请编写一个程序检查表达式中的左右圆括号是否匹配,若匹配,则返回“YES”;否则返回“NO”。表达式长度小于255,左圆括号少于20个。

Input

输入文件包括一行数据,即表达式,

Output

输出文件包括一行,即“YES” 或“NO”。

Examples

Input

2*(x+y)/(1-x)@

Output

YES

Solution 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");
    }
    
}

Solution 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;
}
Time Limit 1 second
Memory Limit 128 MB
Discuss Stats
上一题 下一题