Time Limit: 1sec Memory Limit:256MB
Description
检查输入字符串中的括号是否匹配。括号包括:{, }, (, ), [, ].
Input
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100个字符的字符串。
Output
第一行是一整数,即测试样例个数n.
以下n行,每一行是一个长度不超过100的字符串。
Sample Input
Sample Output
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main() {
int n;
cin >> n;
while (n--) {
string str;
stack<char> temp;
cin >> str;
int size = str.length();
for (int i = 0; i < size; i++) {
if (str[i] == '(' || str[i] == '{' || str[i] == '[') {
temp.push(str[i]);
} else if (str[i] == ')') {
if (temp.empty()) {
temp.push(str[i]);
} else {
if (temp.top() == '(') {
temp.pop();
} else {
temp.push(str[i]);
}
}
} else if (str[i] == '}') {
if (temp.empty()) {
temp.push(str[i]);
} else {
if (temp.top() == '{') {
temp.pop();
} else {
temp.push(str[i]);
}
}
} else if (str[i] == ']') {
if (temp.empty()) {
temp.push(str[i]);
} else {
if (temp.top() == '[') {
temp.pop();
} else {
temp.push(str[i]);
}
}
}
}
if (temp.empty()) {
cout << "Yes" << endl;
} else {
cout << "No" << endl;
}
}
}
算法:利用栈,遍历一个string,遇到左括号就push,遇到右括号如果栈为空就push,不为空,然后栈顶为相匹配的右括号就pop,否则就push
如果最后栈为空,则括号匹配,否则括号不匹配。