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

今日学习

有效的括号

题目链接/文章讲解/视频讲解:https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html

第一想法

将左括号转化为入栈,如果遇到右括号与pop对比,不相等直接false,相等之后继续对比

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function (s) {
    let st = []
    if (s.length % 2 == 1) {
        return false
    }
    for (const i of s) {
        if (i === "[") {
            st.push("]")
        }
        else if (i === "{") {
            st.push("}")
        }
        else if (i === "(") {
            st.push(")")
        }
        else if (i !== st.pop()) {
            return false
        }
    }
    return st.length === 0
};

删除字符串中的所有相邻重复项

题目链接/文章讲解/视频讲解:https://programmercarl.com/1047.%E5%88%A0%E9%99%A4%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E7%9B%B8%E9%82%BB%E9%87%8D%E5%A4%8D%E9%A1%B9.html

第一想法

有点像消消乐

/**
 * @param {string} s
 * @return {string}
 */
var removeDuplicates = function(s) {
    let st = []
    for (const i of s){
        if(st.length > 0 && st[st.length - 1] === i){
            st.pop()
        }else{
            st.push(i)
        }
    }
    return st.join('')
};

逆波兰表达式求值

题目链接/文章讲解/视频讲解:https://programmercarl.com/0150.%E9%80%86%E6%B3%A2%E5%85%B0%E8%A1%A8%E8%BE%BE%E5%BC%8F%E6%B1%82%E5%80%BC.html

第一想法

主要是理解了逆波兰表达式,当是数值是入栈,当是加减乘除时,取顶上两个数进行计算,最后取唯一一个数值

/**
 * @param {string[]} tokens
 * @return {number}
 */
var evalRPN = function(tokens) {
    let stack = []
    for(const token of tokens){
        if (isNaN(Number(token))) { // 非数字
            const n2 = stack.pop(); // 出栈两个数字
            const n1 = stack.pop();
            switch (token) { // 判断运算符类型,算出新数入栈
                case "+":
                    stack.push(n1 + n2);
                    break;
                case "-":
                    stack.push(n1 - n2);
                    break;
                case "*":
                    stack.push(n1 * n2);
                    break;
                case "/":
                    stack.push(n1 / n2 | 0);
                    break;
            }
        } else { // 数字
            stack.push(Number(token));
        }
    }
    return stack[0]
};
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容