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` 函数中,减少了函数调用,代码结构更加紧凑。 ######[AI问答 | 481点数解答 | 2025-12-03 18:40:58]
- 求解特定条件下整数序列的最小值:算法分析与代码实现(字节豆包 | 746点数解答 | 2026-01-24 13:14:40)60
- 巴黎奥运:中国女排淘汰赛对决土耳其,朱婷成致胜关键!(字节豆包 | 448点数解答 | 2024-08-06 15:59:48)167
- 苍溪县开学季“扫黄打非”专项行动成效显著(字节豆包 | 181点数解答 | 2026-03-03 09:57:15)38
- 苍溪县:多措并举为开学季筑牢文化安全防线为主题,开展扫黄打非专项行动,写一个工作信息,精简、符合实际、要有数据和图片,字数控制在200左右(百度文心 | 198点数解答 | 2026-03-03 09:58:19)36
- 苍溪县“扫黄打非”专项行动护航开学季,筑牢青少年文化安全防火墙(DeepSeek | 278点数解答 | 2026-03-03 10:01:39)34
- iOS开发揭秘:序列(Sequence)索引是否从0开始?实例为你解答!(百度文心 | 187点数解答 | 2023-11-09 17:44:38)250
- MATLAB实现r5(n)序列离散傅立叶变换及补零至20长序列DFT计算 (GPT | 339点数解答 | 2024-10-28 16:31:47)278
- 求解整数序列操作最小次数:让前缀和之和等于后缀和之和(DeepSeek | 1329点数解答 | 2025-05-25 17:27:01)230
- C++求解:使整数序列前缀和之和等于后缀和之和的最小操作次数(DeepSeek | 532点数解答 | 2025-05-25 17:27:47)256
- 32位二进制IP地址转点分十进制:Python代码实现及示例(DeepSeek | 102点数解答 | 2026-01-20 13:53:38)46
- C++:轻松判断 int 型整数 32 位内码是否对称,附代码详解!(字节豆包 | 560点数解答 | 2026-01-23 19:44:43)33
- 大学生日常花销记账App开发:测试部署与后端开发工作全揭秘(百度文心 | 612点数解答 | 2024-05-15 18:59:38)352