luogu1739 表达式括号匹配

版权声明:本文为博主原创文章,未经博主允许不得转载,不得用于商业用途。 https://blog.csdn.net/WDAJSNHC/article/details/79945227

luogu1739  表达式括号匹配

时空限制    1000ms/128MB

题目描述

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

输入输出格式

输入格式:

一行:表达式

输出格式:

一行:“YES” 或“NO”

输入输出样例

输入样例#1:

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

输出样例#1:

YES

输入样例#2:

(25+x)*(a*(a+b+b)@

输出样例#2:

NO

说明

表达式长度小于255,左圆括号少于20个

 

代码

法一:STL栈

#include<iostream>
#include<string>
#include<stack>
using namespace std;
string s;
stack<char> sk;

int main(){
	cin>>s;
	int len=s.size()-1;
	for (int i=0; i<len; i++)
		if (s[i]=='(') sk.push(s[i]);
		else if (s[i]==')'){
			if (sk.empty()) { cout<<"NO\n"; return 0; }
			else sk.pop();
		}
	if (sk.empty()) cout<<"YES\n";
	else cout<<"NO\n";
	return 0;
}

法二:手动栈

#include<iostream>
#include<string>
#include<stack>
using namespace std;
string s;

int main(){
	cin>>s;
	int len=s.size()-1,top=0;
	for (int i=0; i<len; i++)
		if (s[i]=='(') top++;
		else if (s[i]==')'){
			if (top<=0) { cout<<"NO\n"; return 0; }
			else top--;
		}
	if (top==0) cout<<"YES\n";
	else cout<<"NO\n";
	return 0;
}
阅读更多

没有更多推荐了,返回首页