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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

【算法入門必刷】數據結構-棧(五)

  • 前言
  • 算法入門刷題訓練
    • AB5:點擊消除
      • 題目分析
      • 理論準備
      • 題解
  • 小結

📦個人主頁:一二三o-0-O的博客
🏆技術方向:C/C++客戶端資深工程師(直播+音視頻剪輯)
👨?💻作者簡介:數據結構算法與音視頻領域創作者
📒 系列專欄:牛客網面試必刷
📣專欄目標:幫助伙伴們通過系統訓練,掌握數據結構與算法,收獲心儀Offer
📝推薦一個找工作神器:牛客刷題網 【面試經驗|實習招聘內推,求職就業一戰解決】
🧡如果對您有幫助的話,歡迎點贊👍收藏📂,關注不迷路

【算法入門必刷】數據結構-棧篇系列文章:
【算法入門必刷】數據結構-棧(一)
【算法入門必刷】數據結構-棧(二)
【算法入門必刷】數據結構-棧(三)
【算法入門必刷】數據結構-棧(四)
【算法入門必刷】數據結構-棧(五)
【算法入門必刷】數據結構-棧(六)

前言

開啟刷題,請點擊右邊鏈接進行跳轉點擊這里

算法入門刷題訓練

AB5:點擊消除

題目分析

描述
牛牛拿到了一個字符串。
他每次“點擊”,可以把字符串中相鄰兩個相同字母消除,例如,字符串"abbc"點擊后可以生成"ac"。
但相同而不相鄰、不相同的相鄰字母都是不可以被消除的。
牛牛想把字符串變得盡可能短。他想知道,當他點擊了足夠多次之后,字符串的最終形態是什么?

根據題目描述,本題是典型的棧的應用維護一個輔助棧,遍歷字符串,在當前棧非空的前提下,判斷即將遍歷的字符是否與棧頂元素相等,如果相等則進行消除,繼續遍歷。不相等則直接入棧,最后棧中剩余的元素就是最終形態,返回即可。

理論準備

首先我們要掌握stack的一些基礎操作:

-----將元素入棧-----
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);
// 如果棧不為空,進入循環
while (!mystack.empty())
{
}

----獲取stack中元素數量-----
std::stack mystack;
for (int i=1;i<=10;i++) mystack.push(i);
// 獲取數量
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’;

題解

具體的解決方案如下:

  • 聲明輔助棧
  • // 輸入字符串 string s; cin >> s; // 聲明輔助棧 int n = s.size(); stack<char> st;
  • 遍歷字符串,當棧頂元素與當前元素相等時則進行消除
  • // 遍歷字符串 for(int i{};i<n;++i){// 如果當前棧為空 and 當前元素與棧頂元素相等if(!st.empty() && st.top() == s[i]){// 進行消除st.pop();}else{// 否則將當前元素入棧st.push(s[i]);} }
  • 最后返回消除完成后最后剩余的字符串
  • // 如果棧為空,則返回0 if(st.empty()){cout << 0 << endl; }else{// 否則根據棧中的元素返回最后剩余的字符串string ans;while(!st.empty()){ans = st.top() + ans;st.pop();}cout << ans << endl; }
  • 完整代碼如下:
  • #include <iostream> #include <stack> #include <string> using namespace std;int main() {string s;cin >> s;int n = s.size();stack<char> st;for(int i{};i<n;++i){if(!st.empty() && st.top() == s[i]){st.pop();}else{st.push(s[i]);}}if(st.empty()){cout << 0 << endl;}else{string ans;while(!st.empty()){ans = st.top() + ans;st.pop();}cout << ans << endl;}return 0; } // 64 位輸出請用 printf("%lld")

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

    小結

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

    總結

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

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。