青少年编程知识记录 codecoming

【数据结构】栈—表达式括号匹配

【题目描述】

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

【输入描述】

一行数据,即表达式。

【输出描述】

一行,即“YES” 或“NO”。

【样例输入】

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

【样例输出】

YES

【题目分析与思路】

  1. 所有的括号匹配正确才是yes,多一个少一个都不行

  2. 本题考虑栈的思想,遇到一个左括号就入栈,如果遇到右括号就让一个左括号出栈

  3. 括号数量一定是匹配的,否则就是NO





                             



#include<iostream>  #include<stack>  #include<cstring>   using namespace std;  char str[1000];  stack<int> S;  int main() {  	gets(str);  	int len=strlen(str);  	for(int i=0; i<len; i++) {  		if(str[i]=='(')//记录左括号  			S.push(1);  		else if(str[i]==')') { //记录右括号  			if(!S.empty())//栈不为空时  				S.pop();  			else  				S.push(2);  		}  	}  	if(S.empty())//栈为空说明匹配  		cout<<"YES"<<endl;  	else  		cout<<"NO"<<endl;  	return 0;  }



作者:亿万年的星光 分类:C++知识 浏览: