西电复试之——真题2009 E 符号前后匹配
合法符号“(”,“)”,“【”,“】”,“{”,“}”;以上假装都是英文的
用到了栈,相对算符表达式简单很多。
代码应该有bug,没有oj测试,随便看看吧。
#include<iostream>
#include<stack>
#include<string>
using namespace std;
stack<char> s;
int main() {
int n;
cin >> n;
string str;
int len;
while (n--) {
cin >> str;
len = str.length();
for (int i = 0; i < len; i++) {
if (str[i] == '{' || str[i] == '[' || str[i] == '(')
s.push(str[i]);
if (str[i] == '}' || str[i] == ']' || str[i] == ')') {
if (s.empty()) {
cout << "No" << endl;
break;
}
char c = s.top();
if (str[i] == '}') {
if (c != '{') {
cout << "No" << endl;
break;
}
else
{
s.pop();
}
}
if (str[i] == ']') {
if (c != '[') {
cout << "No" << endl;
break;
}
else
{
s.pop();
}
}
if (str[i] == ')') {
if (c != '(') {
cout << "No" << endl;
break;
}
else
{
s.pop();
}
}
}
if (i == len - 1)
cout << "Yes" << endl;
}
}
return 0;
}