B - Parentheses Balance (UVA - 673)
阿新 • • 發佈:2018-02-10
etc std 括號 while ets space 字符 ret light
- 題目大意
給出兩個字符()【】,然後根據給的條件來判斷。
- 解題思路
根據給的三個條件,然後利用棧來處理,對於暫時沒有後括號匹配的前括號壓入棧,遇到後括號時看棧頂的前括號與其是否匹配,如果匹配則彈出該前括號。還要判斷下最後棧裏面是不是有剩下的沒有匹配的前括號。(註意空字符也行)
- 代碼
#include<iostream> #include<stack> #include<cstring> using namespace std; int main() { int x; char c[200]; cin >> x; getchar(); while (x--) { stack<char>num; gets(c); if (strcmp(c, "\n") == 0) { cout << "Yes" << endl; continue; } int a = strlen(c); for (int i = 0; i<a; i++) { if (c[i] == ‘(‘||c[i]==‘[‘) { num.push(c[i]); continue; } else if (num.empty()) { num.push(c[i]); } else if (c[i] == ‘)‘&&num.top()==‘(‘|| c[i] == ‘]‘&&num.top() == ‘[‘) { num.pop(); } else { num.push(c[i]); break; } } if (num.empty()) cout << "Yes" << endl; else cout << "No" << endl; } return 0; }
B - Parentheses Balance (UVA - 673)