酷代码 AI
菜单
服务商

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`。 ######[AI问答 | 532点数解答 | 2025-12-04 18:04:18]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]