酷代码 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 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 ((c == ')' && top != '(') || (c == ']' && top != '[') || (c == '}' && top != '{')) { 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; } ``` 代码解释 1. `isValid`函数:该函数用于判断输入的字符串是否为合法括号序列。 - 使用`std::stack`来存储左括号。 - 遍历字符串中的每个字符,如果是左括号,则将其压入栈中。 - 如果是右括号,检查栈是否为空。若为空,说明没有匹配的左括号,返回`false`。 - 若栈不为空,弹出栈顶元素,检查是否与当前右括号匹配。若不匹配,返回`false`。 - 遍历结束后,若栈为空,说明所有左括号都有匹配的右括号,返回`true`;否则返回`false`。 2. `main`函数: - 读取输入的测试数据组数`T`。 - 使用`std::cin.ignore()`忽略换行符。 - 循环`T`次,每次读取一个字符串,并调用`isValid`函数判断其是否合法。 - 根据判断结果输出`YES`或`NO`。 [2025-12-04 18:04:18 | AI问答 | 532点数解答]

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