日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

猿创征文 |【算法入门必刷】数据结构-栈(三)

發(fā)布時間:2024/1/8 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 猿创征文 |【算法入门必刷】数据结构-栈(三) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【算法入門必刷】算法入門-數(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;

  • 遍歷字符串,遇到左括號就將對應(yīng)的右括號入棧;遇到右括號就將棧頂元素與當(dāng)前括號進(jìn)行匹配,匹配成功后彈出,否則標(biāo)明匹配失敗,返回false。
  • // 遍歷整個字符串
    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();
    }
    }

  • 最后返回輔助棧是否為空;非空標(biāo)明還有括號未匹配完成,匹配失敗
  • return st.empty();

  • 完整代碼如下:
  • class Solution { public:/*** * @param s string字符串 * @return bool布爾型*/bool isValid(string s) {// write code herestack<char> st;int n = s.size();for(int i{};i<n;++i){if(s[i] == '('){st.push(')');}else if(s[i] == '['){st.push(']');}else if(s[i] == '{'){st.push('}');}else{if(st.empty() || st.top() != s[i]) return false;st.pop();}}return st.empty();} };

    當(dāng)提交成功后,會展示如下界面,那么恭喜這道題目就通過了!

    小結(jié)

    祝愿所有的伙伴都能拿到自己心儀的Offer!📣伙伴們點擊右邊鏈接立刻開啟刷題吧:牛客——刷題網(wǎng)

    總結(jié)

    以上是生活随笔為你收集整理的猿创征文 |【算法入门必刷】数据结构-栈(三)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。