酷代码 AI
菜单
服务商

题目描述 给定只由 6 种括号字符组成的字符串:(, ), [, ], {, }。判断每个字符串是否为“合法括号序列”, 合法则输出 YES,否则输出 NO。合法括号序列的定义: 空串合法; 若 A 合法,则 (A), [A], {A} 均合法; 若 A 与 B 均合法,则 AB 合法。 输入格式 第一行一个整数 T,表示数据组数。接下来 T 行,每行一个只包含上述 6 种字符的字符串。 输出格式 对于每个字符串,输出一行: 若其为合法括号序列,输出 YES; 否则输出 NO。 输入输出样例 输入 1 ()[]{} 输出 YES 输入 6 () ([)] ([]){} (((( {[()()]} }{ 输出 YES NO YES NO YES NO 说明/提示 记单串长度记为 ∣S∣。测试数据满足 1≤∣S∣≤106,1≤T≤2×105,同一输入文件内总长度 ∑∣S∣≤2×106,字符串只包含字符 ()[]{}。 用c++语言

```cpp #include <iostream> #include <stack> #include <string> // 检查字符对是否匹配 bool isMatching(char open, char close) { if (open == '(' && close == ')') return true; if (open == '[' && close == ']') return true; if (open == '{' && close == '}') return true; return false; } // 检查字符串是否为合法括号序列 bool isValid(const std::string& s) { std::stack<char> st; for (char c : s) { if (c == '(' || c == '[' || c == '{') { st.push(c); } else { if (st.empty()) return false; char top = st.top(); st.pop(); if (!isMatching(top, c)) return false; } } return st.empty(); } int main() { int T; std::cin >> T; std::cin.ignore(); // 忽略换行符 for (int i = 0; i < T; ++i) { std::string s; std::getline(std::cin, s); if (isValid(s)) { std::cout << "YES" << std::endl; } else { std::cout << "NO" << std::endl; } } return 0; } ``` [2025-12-03 18:22:21 | AI问答 | 339点数解答]

相关提问
发财导航,免费问AI
实用工具查看更多