【问题描述】
输入一行字符串,以 '@' 结束。判断其中的括号是否匹配。若匹配则输出YES;否则输出NO。
很显然,这道题用栈模拟最简单(水题)。遇 '(' 进栈,遇 ')' 退栈。最后若栈空,则匹配;否则不匹配。
1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<stack> 7 using namespace std; 8 const int maxn = 260; 9 char a[maxn]; 10 void solve(char a[]) 11 { 12 bool flag = true; 13 stack<int>A; 14 int l = strlen(a); 15 for(int i = 0; i < l; ++i) 16 { 17 if(a[i] == '(') A.push(1); 18 if(a[i] == ')') 19 if(A.empty()) {flag = false; break;} 20 else A.pop(); 21 } 22 if(!A.empty()) flag = false; 23 if(flag == true) printf("YES\n"); 24 else printf("NO\n"); 25 } 26 int main() 27 { 28 a[0] = getchar(); 29 int i = 0; 30 while(a[i] != '@') a[++i] = getchar(); 31 solve(a); 32 return 0; 33 }