当前位置: 首页 > article >正文

【基础算法】栈

文章目录

  • 1.删除字符串中所有相邻项
  • 2.比较含退格的字符串
  • 3.基本计数器ii
  • 4.字符串解码
  • 5.验证栈序列

1.删除字符串中所有相邻项

删除字符串中所有相邻项
在这里插入图片描述

class Solution {
public:
    string removeDuplicates(string s) {
        string ret;
        for(auto ch : s)
        {
            if(ret.size() && ch == ret.back()) ret.pop_back();
            else ret.push_back(ch);
        }
        return ret;
    }
};

2.比较含退格的字符串

比较含退格的字符串

在这里插入图片描述

class Solution {
public:
    bool backspaceCompare(string s, string t) {
        return changeStr(s) == changeStr(t);
    }
    string changeStr(string s){
        string ret;
        for(auto ch : s)
        {
            if(ch != '#') ret += ch;
            else 
            {
                if(ret.size()) ret.pop_back();
            }
        }
        return ret;
    }
};

3.基本计数器ii

基本计数器ii

在这里插入图片描述

class Solution {
public:
    int calculate(string s) {
        vector<int> st;
        char op = '+';
        int i = 0, n = s.size();
        while(i < n)
        {
            if(s[i] == ' ') i++;
            else if(s[i] >= '0' && s[i] <= '9')
            {
                int tmp = 0;
                while(i < n && s[i] >= '0' && s[i] <= '9')
                    tmp = tmp * 10 + (s[i++] - '0');
                if(op == '+') st.push_back(tmp);
                else if(op == '-') st.push_back(-tmp);
                else if(op == '*') st.back() *= tmp;
                else if(op == '/') st.back() /= tmp;
            }
            else 
            {
                op = s[i];
                i++;
            }
        }
        int ret = 0;
        for(auto e : st) 
        {
            ret += e;
        }
        return ret;
    }
};

4.字符串解码

字符串解码

在这里插入图片描述

class Solution {
public:
    string decodeString(string s) {
        stack<int> nums;
        stack<string> st;
        st.push("");
        int n = s.size();
        int i = 0;
        while(i < n)
        {
            if(s[i] >= '0' && s[i] <= '9')
            {
                int tmp = 0;
                while(s[i] >= '0' && s[i] <= '9')
                {
                    tmp = tmp * 10 + (s[i] - '0');
                    i++;
                }
                nums.push(tmp);
            }
            else if(s[i] == '[')
            {
                i++;//跳过'['
                string tmp = "";
                while(s[i] >= 'a' && s[i] <= 'z')
                {
                    tmp += s[i];
                    i++;
                }
                st.push(tmp);
            }
            else if(s[i] == ']')
            {
                string tmp = st.top();
                st.pop();
                int k = nums.top();
                nums.pop();

                while(k--)
                {
                    st.top() += tmp;
                }
                i++;
            }
            else
            {
                while(i < n && s[i] >= 'a' && s[i] <= 'z')
                {
                    st.top() += s[i];
                    i++;
                }
            }
        }
        return st.top();
    }
};

5.验证栈序列

验证栈序列

在这里插入图片描述

class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        stack<int> st;
        int i = 0, n = popped.size();
        for(auto x : pushed)
        {
            st.push(x);
            while(st.size() && st.top() == popped[i])
            {
                st.pop();
                i++;
            }
        }
        return i == n;
    }
};

http://www.kler.cn/a/398013.html

相关文章:

  • 性能高于Transformer模型1.7-2倍,彩云科技发布基于DCFormer架构通用大模型云锦天章
  • 37.超级简易的计算器 C语言
  • 量化交易系统开发-实时行情自动化交易-3.4.3.3.期货市场深度数据
  • 效率工具-tig的使用
  • 六自由度双足机器人运动控制
  • 基于PHP技术的校园站的设计与实现
  • 对链表进行插入排序
  • 2024年11月16日Github流行趋势
  • 基于opencv制作GUI界面
  • wsl2配置文件.wslconfig不生效
  • 华为Mate 70临近上市:代理IP与抢购攻略
  • 10款PDF合并工具的使用体验与推荐!!
  • UE5材质篇 3 MaterialFunction
  • Jupyter Book 快捷键总结大全
  • Win11 安装与配置 Java环境 JDK(以JDK11为例)
  • MinIO 的 S3 over RDMA 计划: 为高速人工智能数据基础设施设定对象存储新标准
  • 永磁电机的前生今世和未来?
  • 20241116解决在WIN11和ubuntu20.04通过samba共享时出现局域网千兆带宽拉满的情况
  • android studio新建activity提示 require androidX support
  • 2.操作系统常见面试问题3
  • 【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing
  • Acrobat Pro DC 2023(pdf免费转化word)
  • 从零开始学习 sg200x 多核开发之 eth0 MAC 地址修改
  • redis和mongodb等对比分析
  • 机器学习—Additional Layer Types
  • 零基础利用实战项目学会Pytorch