Description
检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ].
Input
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100个字符的字符串。
Output
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100的字符串。
Sample Input
Copy sample input to clipboard
3
a
2-[(1+2)*2]
(a+b])
Sample Output
Yes
Yes
No
我的代码
// Problem#: 19145
// Submission#: 4806834
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <iostream>
#include <stack>
#include <string>
using namespace std;
int main() {
int n;
string temp;
stack<char> s;
cin >> n;
if (n <= 0) return 0;
while (n--) {
bool flag = true;
cin >> temp;
for (int i = 0; i < temp.size(); i++) {
if (temp[i] == '{' || temp[i] == '(' || temp[i] == '[') {
s.push(temp[i]);
} else if (temp[i] == '}' || temp[i] == ')' || temp[i] == ']') {
if (s.empty()) {
flag = false;
break;
}
if ((temp[i] == '}' && s.top() == '{') ||
(temp[i] == ')' && s.top() == '(') ||
(temp[i] == ']' && s.top() == '[') ) {
s.pop();
} else {
flag = false;
break;
}
}
}
if (!s.empty()) flag = false;
if (flag == false) cout << "No" << endl;
else cout << "Yes" << endl;
temp.clear();
while (!s.empty()) s.pop();
}
return 0;
}