• LeetCode 75 part 06 栈


    2390.从字符串中移除星号

    思路:把元素加入栈中,遇到 * 号直接弹出栈顶元素
    1. class Solution {
    2. public:
    3. string removeStars(string s) {
    4. stack<char>st;
    5. for(int i=0;isize();i++){//字符加入栈,遇到星号弹出栈
    6. if(s[i]!='*') st.push(s[i]);
    7. else st.pop();
    8. }
    9. int n=st.size();
    10. for(int i=n-1;i>=0;i--){//把栈中元素倒序赋值给s
    11. char mid=st.top();
    12. s[i]=mid;
    13. st.pop();
    14. }
    15. return s.substr(0,n);//截取s的结果部分
    16. }
    17. };

    735.小行星碰撞

    分析:只有左边向右,右边向左时,两个星球才会相撞
    思路一:使用 vector 模拟栈

            遍历数组,当出现两个星球相撞时

    • 1.两个星球相等:栈顶弹出
    • 2.栈顶的元素大:跳过
    • 3.栈顶的元素小:栈顶弹出,当前遍历星球存活,还需要判断下一个栈顶情况

            所以,栈顶元素小的情况下,可能当前遍历星球会存活,所以引入 bool 变量记录

    1. class Solution {
    2. public:
    3. vector<int> asteroidCollision(vector<int>& asteroids) {
    4. vector<int>res;
    5. int n=asteroids.size();
    6. for(int it:asteroids){//遍历数组
    7. bool alive=true;//判断当前行星是否存活
    8. while(alive && it<0 && !res.empty() && res.back()>0){
    9. alive=res.back()<-it;//记录当前值大于栈顶值,当前值存活
    10. if(res.back()<=-it) res.pop_back();//弹出较小的栈顶
    11. }
    12. if(alive) res.push_back(it);//当前行星存活,直接加入
    13. }
    14. return res;
    15. }
    16. };

    394.字符串解码

    思路一:
    • 考虑用 pair 把字符串和次数进行组合
    • 延迟满足
      • 每一个组合存储:上一次遍历的结果字符当前字符的次数
      • 当遍历到数字时:考虑大于9,需要对上一次存储数字进行*10操作
      • 遍历到 ' [  ' 符号时:将上一次结果字符刚读取的当前字符次数存储到栈中,并且把 num赋值为0结果字符置空(准备下一次赋值)
      • 遍历到 ' ] ' 符号时:将当前字符进行累加(使用栈顶的字符次数),然后再加到栈顶的结果字符后面
      • 当遍历到字符时:将字符直接加入结果字符(' [ ' 时已置空)
    1. class Solution {
    2. public:
    3. string decodeString(string s) {
    4. stackint>>st;
    5. int num=0;
    6. string res;
    7. for(char it:s){
    8. if(it>='0' && it<='9') num=num*10+(it-'0');//遍历到数字时
    9. else if(it=='['){//遍历到左括号
    10. st.push(make_pair(res,num));
    11. res="";
    12. num=0;
    13. }
    14. else if(it==']'){//遍历到右括号
    15. string pre=st.top().first;//获取上次的结果字符
    16. int n=st.top().second;//获取当前字符对应的数字
    17. string cur;
    18. for(int i=0;i
    19. res=pre+cur;
    20. st.pop();
    21. }
    22. else res+=it;//遍历到字母
    23. cout<
    24. }
    25. return res;
    26. }
    27. };

  • 相关阅读:
    【Java设计模式 常用编程设计原则】KISS、YAGNI和DRY原则
    基于B2B平台的医疗病历交互系统
    计算机毕业设计(附源码)python智慧校园系统
    Spring中拦截器重复注册的问题排查
    php将在线远程文件写入临时文件
    AWS认证SAA-C03每日一题
    从零开始编写一个 Python 异步 ASGI WEB 框架
    【JS】获取hash模式下URL的搜索参数
    docker镜像与容器基本的基本操作
    js — 原生轮播图的制作
  • 原文地址:https://blog.csdn.net/Ricardo_XIAOHAO/article/details/133363811