- 题目大意
给出两个字符()【】,然后根据给的条件来判断。
- 解题思路
根据给的三个条件,然后利用栈来处理,对于暂时没有后括号匹配的前括号压入栈,遇到后括号时看栈顶的前括号与其是否匹配,如果匹配则弹出该前括号。还要判断下最后栈里面是不是有剩下的没有匹配的前括号。(注意空字符也行)
- 代码
#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; }