HCSDN

仅用于学习C++

luogu1739 表达式括号匹配

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个


代码

法一:常规版本

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

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

法二:STL栈版本

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

int main(){
	cin>>s;
	int len=s.size();
	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;
}
阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载,不得用于商业用途。 https://blog.csdn.net/WDAJSNHC/article/details/79945227
个人分类:
上一篇codeup21158 循环比赛日程表
下一篇jzxx1542 括弧匹配检验
想对作者说点什么? 我来说一句

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

关闭
关闭