洛谷 P1739 表達式括號匹配【STL/stack/模擬】
阿新 • • 發佈:2018-05-22
stack clu b+ ack 編寫一個程序 輸入輸出格式 turn 是否 algorithm
題目描述
假設一個表達式有英文字母(小寫)、運算符(+,—,*,/)和左右小(圓)括號構成,以“@”作為表達式的結束符。請編寫一個程序檢查表達式中的左右圓括號是否匹配,若匹配,則返回“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<algorithm> #include<cstdio> #include<iostream> #include<set> #include<sstream> #include<cmath> #include<queue> #include<stack> #include<map> #include<string> #include<cstring> #include<string.h> using namespace std; const int maxn = 1e5+5; char s[maxn]; stack<char> st; int main() { cin>>s; for(int i=0; s[i]!='@'; i++) { if(s[i]=='(') st.push(s[i]); if(s[i]==')'){ if(st.empty()){ cout<<"NO"<<endl; return 0; } else st.pop(); } } if(!st.empty()) printf("NO\n"); else printf("YES\n"); return 0; }
【數組模擬】
#include<algorithm> #include<cstdio> #include<iostream> #include<set> #include<sstream> #include<cmath> #include<queue> #include<stack> #include<map> #include<string> #include<cstring> #include<string.h> using namespace std; const int maxn = 1e5+5; char s[maxn]; stack<char> st; int main() { int top=0; cin>>s; for(int i=0; s[i]!='@'; i++) { if(s[i]=='(') top++; if(s[i]==')'){ if(top) top--; else {cout<<"NO"<<endl;return 0;} } } if(top) printf("NO\n"); else printf("YES\n"); return 0; }
洛谷 P1739 表達式括號匹配【STL/stack/模擬】