编程基础 - 栈的应用 - 括号匹配问题(Bracket Matching)
文章目录
1 括号匹配简述
所谓括号匹配,可以延伸出许多匹配问题,不限于括号。只要是两个字符就可以设置成匹配关系。
常见的匹配关系:(), [], {}, ##, "", '', &&
。
我们这里就三种括号(()
,[]
,{}
)的匹配来进行编写。
在对元素依次进栈过程中,过程可以描述为:
-
遇到左括号,左括号进栈
-
遇到右括号,对比栈顶是否为对应的左括号
- 栈顶为空:输入不合法
- 栈顶为对应的左括号:左括号出栈
- 栈顶为非对应的左括号:输入不合法
-
当所有元素都检查完毕时,如果栈内还有元素(左括号数量多余右括号),说明输入依然不合法。
2 括号匹配(C++ Code)
2.1 头文件main.h
#pragma once
#include <string> // 字符串
#include <stack> // 栈
#include <unordered_map> // 字典
2.2 主函数文件main.cpp
首先是检测函数:
// 匹配括号
// params:
// input: 输入字符串
// right2Left: 右括号到左括号的映射
bool MatchBracket(string input, unordered_map<char, char> right2Left)
{
if (input.