本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。
欢迎大家订阅我的专栏:算法题解:C++与Python实现!
附上汇总贴:算法竞赛备考冲刺必刷题(C++) | 汇总
【题目来源】
洛谷:B3758 [信息与未来 2021] 括号序列 - 洛谷 (luogu.com.cn)
【题目描述】
你得到了一个仅包含左圆括号(和右圆括号)的字符串,但其中的括号并不配对。为了使这个字符串变得更好看,你希望在字符串中插入尽可能少的圆括号(可以在任意位置插入任意数量的括号,但已有的括号不能改变),使修改后的字符串括号配对。
【输入】
输入一行一个字符串,为括号未全部配对的圆括号序列。
【输出】
输出一行,为插入圆括号后配对的字符串。如有多种长度最短的方案,输出任意一个即可。
【输入样例】
(())()(【输出样例】
(())()()【算法标签】
《洛谷 B3758 括号序列》 #字符串# #贪心# #栈# #信息与未来# #2021# #江苏# #Special Judge#
【代码详解】
#include<bits/stdc++.h>usingnamespacestd;string s;// 输入字符串stack<char>sta;// 用于匹配括号的栈intmain(){cin>>s;// 读入字符串for(inti=0;i<s.size();i++)// 遍历字符串{charc=s[i];// 当前字符if(c=='(')// 如果是左括号{cout<<c;// 输出左括号sta.push(c);// 左括号入栈}else// 如果是右括号{if(sta.size())// 栈不为空,有匹配的左括号{sta.pop();// 弹出匹配的左括号cout<<c;// 输出右括号}else// 栈为空,右括号没有匹配的左括号cout<<"()";// 补全为"()"}}while(sta.size())// 处理栈中剩余的左括号{cout<<')';// 为每个多余的左括号补右括号sta.pop();// 弹出左括号}return0;}【运行结果】
(())()( (())()()