第三部分 數據結構 -第一章 棧-1353:表達式括號匹配(stack)

1353:表達式括號匹配(stack)

時間限制: 1000 ms 內存限制: 65536 KB
提交數: 10067 通過數: 5352
【題目描述】
假設一個表達式有英文字母(小寫)、運算符(+,—,∗,/)和左右小(圓)括號構成,以“@”作爲表達式的結束符。請編寫一個程序檢查表達式中的左右圓括號是否匹配,若匹配,則返回“YES”;否則返回“NO”。表達式長度小於255,左圓括號少於20個。

【輸入】
一行數據,即表達式。

【輸出】
一行,即“YES” 或“NO”。

【輸入樣例】
2*(x+y)/(1-x)@
【輸出樣例】
YES
【提示】
【樣例輸入2】

(25+x)(a(a+b+b)@
【樣例輸出2】

NO


思路:利用棧,掃描字符c,若遇到‘(’進去,若遇到‘)’出去。注意兩種情況:棧發生下溢和表達式處理完畢但棧非空時,都是NO。其他則是匹配

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
	char a[10001];
	int i = 0,tot = 0;
	cin >> a;
	while(a[i] != '@')//循環知道@結束
	{
		if(a[i] == '(') tot++;//記錄左括號,表達式長度小於255
		if(a[i] == ')')//記錄右括號
		{
			if(tot >= 0) tot--;
			else break;
		}
		i++;
			}
		if(tot != 0) cout << "NO";
		else cout << "YES";
	
} 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章