猿创征文 |【算法入门必刷】数据结构-栈(三)
【算法入門必刷】算法入門-數(shù)據(jù)結(jié)構(gòu)-棧(三)
- 前言
- 算法入門刷題訓(xùn)練
- 題目AB3:有效括號序列
- 題目分析
- 理論準(zhǔn)備
- 題解
- 小結(jié)
📦個人主頁:一二三o-0-O的博客
🏆技術(shù)方向:C/C++客戶端資深工程師(直播+音視頻剪輯)
👨?💻作者簡介:數(shù)據(jù)結(jié)構(gòu)算法與音視頻領(lǐng)域創(chuàng)作者
📒 系列專欄:牛客網(wǎng)面試必刷
📣專欄目標(biāo):幫助伙伴們通過系統(tǒng)訓(xùn)練,掌握數(shù)據(jù)結(jié)構(gòu)與算法,收獲心儀Offer
📝推薦一個找工作神器:牛客刷題網(wǎng) 【面試經(jīng)驗|實習(xí)招聘內(nèi)推,求職就業(yè)一戰(zhàn)解決】
🧡如果對您有幫助的話,歡迎點贊👍收藏📂,關(guān)注不迷路
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧篇系列文章:
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(一)
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(二)
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(三)
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(四)
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(五)
【算法入門必刷】數(shù)據(jù)結(jié)構(gòu)-棧(六)
前言
開啟刷題,請點擊右邊鏈接進(jìn)行跳轉(zhuǎn)點擊這里
算法入門刷題訓(xùn)練
題目AB3:有效括號序列
題目分析
描述
給出一個僅包含字符’(‘,’)‘,’{‘,’}‘,’[‘和’]',的字符串,判斷給出的字符串是否是合法的括號序列
括號必須以正確的順序關(guān)閉,"()“和”()[]{}“都是合法的括號序列,但”(]“和”([)]"不合法。
數(shù)據(jù)范圍:字符串長度 100000≤n≤10000
要求:空間復(fù)雜度 O(n),時間復(fù)雜度 O(n)
根據(jù)題目描述,本題是典型的棧的應(yīng)用。維護(hù)一個輔助棧,遍歷字符串,遇到左括號就將對應(yīng)的右括號入棧;遇到右括號就將棧頂元素與當(dāng)前括號進(jìn)行匹配,匹配成功后彈出,否則標(biāo)明匹配失敗,返回false。
理論準(zhǔn)備
首先我們要掌握stack的一些基礎(chǔ)操作:
-----將元素入棧-----
std::stack mystack;
// 依次將元素1-10入棧
for (int i=1;i<=10;i++) mystack.push(i);
-----判斷stack是否為空-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 如果棧不為空,進(jìn)入循環(huán)
while (!mystack.empty())
{
}
----獲取stack中元素數(shù)量-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 獲取數(shù)量
int size = mystack.size();
-----獲取棧頂元素-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 獲取棧頂元素
int topNum = mystack.top();
-----彈出棧頂元素-----
std::stack mystack;
int sum (0);
for (int i=1;i<=10;i++) mystack.push(i);
while (!mystack.empty())
{
sum += mystack.top();
// 彈出棧頂元素
mystack.pop();
}
std::cout << "total: " << sum << ‘\n’;
題解
具體的解決方案如下:
// 獲取字符串大小
int n = s.size();
// 聲明輔助棧
stack st;
// 遍歷整個字符串
for(int i{};i<n;++i){
// 遇到左括號就將對應(yīng)的右括號入棧
if(s[i] == ‘(’){
st.push(‘)’);
}else if(s[i] == ‘[’){
st.push(‘]’);
}else if(s[i] == ‘{’){
st.push(‘}’);
}else{// 遇到右括號就將棧頂元素與當(dāng)前括號匹配
// 匹配失敗返回false
if(st.empty() || st.top() != s[i]) return false;
// 匹配成功彈出元素
st.pop();
}
}
return st.empty();
當(dāng)提交成功后,會展示如下界面,那么恭喜這道題目就通過了!
小結(jié)
祝愿所有的伙伴都能拿到自己心儀的Offer!📣伙伴們點擊右邊鏈接立刻開啟刷題吧:牛客——刷題網(wǎng)
總結(jié)
以上是生活随笔為你收集整理的猿创征文 |【算法入门必刷】数据结构-栈(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity LineRenderer 画
- 下一篇: Qt sql中出现的错误 Error: