《算法通关指南:数据结构和算法篇 --- 栈相关算法题》--- 1.括号序列
《算法通关指南:数据结构和算法篇 — 栈相关算法题》— 1.括号序列

🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人方向学习者
❄️个人专栏:《C语言》《算法》KelpBar海带Linux智慧屏项目
✨永远相信美好的事情即将发生

文章目录
- 《算法通关指南:数据结构和算法篇 --- 栈相关算法题》--- 1.括号序列
- 前言
- 一、括号序列
- 1.1题目
- 1.2算法原理
- 1.3代码
- 总结与每日励志
前言
本系列讲解算法竞赛的数据结构在算法竞赛中,我们主要关心的其实是时间开销,空间上是基本够用的,因此我们是使用庞大的数组实现的话不多说冲!
一、括号序列
1.1题目
链接:括号序列

1.2算法原理
考点:模拟
(1)先用栈模拟⼀遍括号匹配的过程,同时用⼀个bool类型的数组st标记哪些位置可以匹配设为true,哪些位置不可以匹配设为0。
(2)模拟结束之后利用st的标记把未匹配位置的括号添上⼀个相应的括号即可。
1.3代码
#include <iostream>
#include <stack>
using namespace std;
const int N = 300;
string s;
stack<int> stk; // 里面存的是左括号的下标
bool st[N]; // 标记有没有匹配int main()
{cin >> s;for (int i = 0; i < s.size(); i++){if (s[i] == '(' || s[i] == '[')stk.push(i);else{if (stk.empty())continue;if (s[stk.top()] =='(' && s[i] == ')' || s[stk.top()] == '[' && s[i] == ']'){st[i] = true;st[stk.top()] = true;stk.pop();}}}string ret;for (int i = 0; i < s.size(); i++){char ch = s[i];if (st[i])ret += ch;// 不能匹配就要加括号else if (ch == '('){ret += ch;ret += ')';}else if (ch == '['){ret += ch;ret += ']';}else if (ch == ')'){ret += '(';ret += ch;}else if (ch == ']'){ret += '[';ret += ch;}}cout << ret << endl;return 0;
}
总结与每日励志
本文介绍了括号序列匹配问题。通过栈模拟括号匹配过程,用bool数组标记匹配位置,最终为未匹配的括号补全相应的括号。代码实现展示了如何处理四种括号情况,确保序列完整。

