首页 > 编程语言 >代码随想录算法训练营第第11天 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值

代码随想录算法训练营第第11天 | 20. 有效的括号 、1047. 删除字符串中的所有相邻重复项 、150. 逆波兰表达式求值

时间:2024-05-18 13:40:30浏览次数:28  
标签:11 const string 随想录 讲解 求值 return stack

今天的题主要是关于栈的,比较简单,一次性过
20. 有效的括号

讲完了栈实现队列,队列实现栈,接下来就是栈的经典应用了。
大家先自己思考一下 有哪些不匹配的场景,在看视频 我讲的都有哪些场景,落实到代码其实就容易很多了。
题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.有效的括号.html

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const stack = [];
    const common = {
        ')':'(',
        '}':'{',
        ']':'[',
    }
    const common2 = ['(','{','[']
    for(let i=0;i<s.length;i++){
        if (common2.includes(s[i])) {
            stack.push(s[i]);
            continue;
        }
        let last = stack.pop();
        if (last!==common[s[i]]) {
            return false;
        }
    }
    return stack.length>0?false:true;
};
  1. 删除字符串中的所有相邻重复项

栈的经典应用。
要知道栈为什么适合做这种类似于爱消除的操作,因为栈帮助我们记录了 遍历数组当前元素时候,前一个元素是什么。
题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.删除字符串中的所有相邻重复项.html

/**
 * @param {string} s
 * @return {string}
 */
var removeDuplicates = function(s) {
    const stack = [s[0]];
    for (let i=1;i<s.length;i++) {
        if(stack[stack.length-1]===s[i]){
            stack.pop();
        }else{
            stack.push(s[i])
        }
    }
    return stack.join('');
};
  1. 逆波兰表达式求值

本题不难,但第一次做的话,会很难想到,所以先看视频,了解思路再去做题
题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.逆波兰表达式求值.html

/**
 * @param {string[]} tokens
 * @return {number}
 */
var evalRPN = function(tokens) {
    
    const stack = [];
    for(let i=0;i<tokens.length;i++){
        let c = tokens[i];
        if (isNaN(Number(c))) {
            let fast = stack.pop();
            let two = stack.pop();
            switch(c){       
                case '+':
                    stack.push(fast+two);
                    break;
                case '-':
                    stack.push(two-fast);
                    break;
                case '*':
                    stack.push(two*fast);
                    break;
                case '/':
                    stack.push(two/fast>0?Math.floor(two/fast):Math.ceil(two/fast));
                    break;

            }
            console.log(stack)
        }else{
            stack.push(Number(c));
        }

    }
    return stack[0];
};

标签:11,const,string,随想录,讲解,求值,return,stack
From: https://www.cnblogs.com/yuanyf6/p/18199268

相关文章

  • 表达式树求值的空间复用
    回忆一致\(\mathsf{NC}^1\)电路是说一个\(O(\logn)\)深度,可以由对数空间Turing机生成的布尔电路,这个\(O(\logn)\)层的电路暴力展开就是一颗\(n^{O(1)}\)大小的表达式树.反过来,对于任何一颗表达式树,我们也可以用树分治的方法将其对数空间规约到一个\(O(\log......
  • Codeforces 1113B Sasha and Magnetic Machines 题解
    题目简述有一个长度为$n$的正整数序列。你可以对这个数列进行最多$1$次的如下操作:选择两个数$i$和$j$,其中$1\leqi,j\leqn$并且$i\neqj$,并选择一个可以整除$a_i$的正整数$x$,然后将$a_i$变为$\frac{a_i}{x}$,将$a_j$变为$a_j\cdotx$。问你操作后,该序......
  • Codeforces 1178B WOW Factor
    题目简述给定一个只含$v$和$o$的字符串$s$,求字符串中有多少个$wow$(一个$w$即为连续的两个$v$)。题目分析考虑枚举每一个$o$,设下标为$i$,统计它左边和右边各有多少个$w$,分别设为$a_{i-1}$和$b_{i+1}$,依据乘法原理,将它们乘起来即为答案,累加即可。接下来,考虑怎么处......
  • 「杂题乱刷」AT_abc211_e
    题目链接[ABC211E]RedPolyomino(luogu)[ABC211E]RedPolyomino(at)解题思路从第三个样例可以看出总的方案数一定很少,因此我们可以直接确定第一个被染色的格子后直接向外爆搜,搜到最后可以使用哈希判重,但光凭这样的话\(2\)秒钟肯定跑不过去,因此我们可以在搜索的过程中使用......
  • Oracle11g-EXP-00091错误
    环境说明oracle11gwin10问题情况在终端中exp导出数据库时,遇到报错“EXP-00091”,按照网上教程修改NLS_LANG但是没有效果。最终原因在power中设置环境变量NLS_LANG的方法与CMD不一样。备注记录先通过服务端查询编码集select*fromnls_database_parameterstwheret.pa......
  • hdu1176免费馅饼java
    一个数塔问题,以时间为纵坐标、位置为横坐标创建一个二维数组,然后从下往上相加。状态转移方程:9>=j>=1时dp[i][j]+=max(max(dp[i+1][j],dp[i+1][j+1]),dp[i+1][j-1])  j=0时 dp[i][j]+=max(dp[i+1][j],dp[i+1][j+1]) j=10时dp[i][j]+=......
  • 代码随想录算法训练营第第九天 | 28. 实现 strStr() 、459.重复的子字符串
    实现strStr()因为KMP算法很难,大家别奢求一次就把kmp全理解了,大家刚学KMP一定会有各种各样的疑问,先留着,别期望立刻啃明白,第一遍了解大概思路,二刷的时候,再看KMP会好懂很多。或者说大家可以放弃一刷可以不看KMP,今天来回顾一下之前的算法题目就可以。因为大家算法能力还没到,......
  • 《代码随想录》-3.长度最小的子数组
    题目:给定一个含有n个正整数的数组和一个正整数s,找出该数组中满足其和≥s的长度最小的连续子数组,并返回其长度。如果不存在符合条件的子数组,返回0。滑动窗口:只用一个for循环,其索引指向窗口终点位置窗口是满足其和>=s的最小长度的连续数组当窗口大于等于s,起始位置就要......
  • C++_交叉编译和pybind11
    编译本地编译和交叉编译本地编译当前平台编译交叉编译交叉编译是指在一个平台上编译另一个平台上运行的代码。在C++中,交叉编译通常涉及以下步骤:安装交叉编译工具链。配置编译环境。使用工具链编译代码。首先,确保安装了交叉编译工具链,例如gcc-arm-l......
  • 软件评测师笔记11--可靠性测试相关
    什么是可靠性产品在规定的条件和时间内完成特定的功能,产品维持的性能指标 可靠性测试目的1、发现软件系统在需求、设计、编码、测试、实施等各方面的各种缺陷2、为软件的使用和维护提供可靠性数据3、确认软件是否达到可靠性的定量要求 影响可靠性因素环境、软件规模、......