A39807. 括号配对
填空题
困难
知识点
题目描述
括号配对
题目描述
字符串中可能有三种成对的括号,"( )"、"[ ]"、"{ }"。请判断字符串的括号是否都正确配对。无括号也算正确配对。括号交叉算不正确配对,例如"12{34[78}ab]"就不算正确配对。但是一对括号被包含在另一对括号里面,例如"12{ab[8]}"不影响正确性。
输入
第一行为整数n(n <40),
接下来有n行,每行一个无空格的字符串,长度小于1000。
输出
对每行字符串,如果括号配对,输出"YES",否则输出"NO"。
样例输入
2
12{ab[8]}
12{34[78}ab]
样例输出
YES
NO
参考答案
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int main() {
cin >> n;
while (n--) {
cin >> s;
stack<char> st;
int ls = s.size();
bool sign = true;
for (int i = 0; i < ls; i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{')
st.push(s[i]);
else if (!st.empty() && s[i] == ')') {
if (st.top() == '(')
st.pop();
else
sign = false;
} else if (s[i] == '}') {
if (!st.empty() && st.top() == '{')
st.pop();
else
sign = false;
} else if (s[i] == ']') {
if (!st.empty() && st.top() == '[')
st.pop();
else
sign = false;
}
}
if (st.empty() && sign)
cout << "YES" << endl;
else
cout << "NO" << endl;
}
return 0;
}
上一题
下一题