再简单点,用c++
```cpp #include <iostream> #include <stack> #include <string> int main() { int T; std::cin >> T; while (T--) { std::string s; std::cin >> s; std::stack<char> st; bool valid = true; for (char c : s) { if (c == '(' || c == '[' || c == '{') { st.push(c); } else { if (st.empty() || (c == ')' && st.top() != '(') || (c == ']' && st.top() != '[') || (c == '}' && st.top() != '{')) { valid = false; break; } st.pop(); } } if (valid && st.empty()) { std::cout << "YES" << std::endl; } else { std::cout << "NO" << std::endl; } } return 0; } ``` 代码解释 1. 整体结构: - 首先读取测试用例的数量 `T`。 - 对于每个测试用例,读取一个字符串,然后使用栈来检查该字符串是否为合法的括号序列。 2. 栈的使用: - 遍历字符串中的每个字符,如果是左括号(`(`, `[`, `{`),将其压入栈中。 - 如果是右括号(`)`, `]`, `}`),检查栈是否为空或者栈顶元素是否与当前右括号匹配,如果不满足条件则将 `valid` 标记为 `false` 并跳出循环。 - 如果匹配成功,则弹出栈顶元素。 3. 结果判断: - 最后检查 `valid` 标记是否为 `true` 且栈是否为空,如果是则输出 `YES`,否则输出 `NO`。 这个代码将大部分逻辑都放在了 `main` 函数中,减少了函数调用,代码结构更加紧凑。 [2025-12-03 18:40:58 | AI问答 | 481点数解答]