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

今天的题主要是关于栈的,比较简单,一次性过
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];
};
posted @ 2024-05-18 13:40  YuanYF6  阅读(1)  评论(0编辑  收藏  举报