2386 - 表达式括号匹配

通过次数

0

提交次数

0

时间限制 : 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')