qfedu-cpp-level/day10/stl_map_demo/d2.cpp

62 lines
1.3 KiB
C++

// 使用 map 来解决括号匹配
#include <iostream>
#include <map>
#include <stack>
#include <string>
using namespace std;
string left_c = "{[(";
map<char, char> map1;
bool valid(const char *p)
{
stack<char> 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;
}