测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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; }
上一题 下一题