任何疑问、意见、建议请留言公众号:一航代码
题目描述:
括号匹配,输入测试数目n,接着n行输入n组样例,假设只包含小括号和中括号。
输入格式:
首先输入测试数目n,接着n行输入n组样例,假设只包含小括号和中括号。
输出格式:
若括号可以成对匹配,则输出 yes ,否则输出 no 。
输入样例:
4
()()()(())
([])[)
([)]
]
输出样例:
yes
no
yes
no
解决方法:
(1)代码实现:
#include <algorithm>
#include <iostream>
#include <math.h>
#include <stack>
#include <string>
#include <vector>
using namespace std;
int main()
{
int n;
cin >> n;
for (int k = 0; k < n; k++) {
string s;
stack<char> st1;
stack<char> st2;
bool flag = true; //记录此时栈是否为空,栈空则不能进行pop操作
cin >> s; //flag为false则仅有右括号,无法匹配
for (int i = 0; i < (int)s.size(); i++) {
switch (s[i]) {
case '(': {
st1.push('(');
break;
}
case ')': {
if (st1.empty()) {
flag = false;
break;
} else {
st1.pop();
break;
}
}
case '[': {
st2.push('[');
break;
}
case ']': {
if (st2.empty()) {
flag = false;
break;
} else {
st2.pop();
break;
}
}
}
}
if (st1.empty() && st2.empty() && flag) {
printf("yes\n");
} else {
printf("no\n");
}
}
return 0;
}