// 使用 map 来解决括号匹配 #include #include #include #include using namespace std; string left_c = "{[("; map map1; bool valid(const char *p) { stack stk; int max_depth = 0; while (*p) { const char &cp = *p; // if (left_c.find(cp) != string::npos) // 如果当前拿到的是左括号 if (left_c.find(cp) != -1) // 如果当前拿到的是左括号 { // 入栈 stk.push(*p); } else // 如果当前拿到的是右括号 { // 弹栈 if (stk.empty()) return false; const char &top = stk.top(); if (map1[cp] != top) return false; // 当前左右匹配的后续操作 // 求最大深度 if (max_depth < stk.size()) max_depth = stk.size(); // 弹栈前判断最大深度 stk.pop(); } p++; } cout << "当前括号栈的最大深度为: " << max_depth << endl; return stk.empty(); } int main() { map1.insert(make_pair('}', '{')); map1.insert(make_pair(']', '[')); map1.insert(make_pair(')', '(')); cout << valid("{[()]}[[[[[()]]]]]") << endl; cout << valid("{[())}") << endl; return 0; }