62 lines
1.3 KiB
C++
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;
|
||
|
}
|