用栈就搞定了,忘了刚开始会出现 )) ,]] 这种情况,没有加栈非空的条件,结果RE了好几次,智商太拙计。
AC代码:
#include <iostream> #include <cstdio> #include <cstdlib> #include <cctype> #include <cstring> #include <string> #include <sstream> #include <vector> #include <set> #include <map> #include <algorithm> #include <stack> #include <queue> #include <bitset> #include <cassert> #include <cmath> using namespace std; const int maxn = 256; int main() { int n; scanf("%d", &n); getchar(); while (n--) { char str[maxn]; fgets(str, sizeof(str), stdin); bool flag = true; stack<char> stc; for (int i = 0; str[i] != ' '; i++) { switch (str[i]) { case '(': stc.push(str[i]); break; case '[': stc.push(str[i]); break; case ')': // 刚开始忘了加!stc.empty(),RE了好几次,太伤心了 if (!stc.empty() && stc.top() == '(') { stc.pop(); } else { flag = false; } break; case ']': if (!stc.empty() && stc.top() == '[') { stc.pop(); } else { flag = false; } break; } if (!flag) { break; } } if (flag && stc.empty()) { printf("Yes "); } else { printf("No "); } } return 0; }