代码随想录Day11-Leetcode20. 有效的括号,1047. 删除字符串中的所有相邻重复项,150. 逆波兰表达式求值

20. 有效的括号

写过很多遍了,但还是不能秒a

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    let stack = []
    let obj = {'(':')', '[':']', '{':'}'}
    let map = new Map(Object.entries(obj))
    let set = new Set([')',']','}'])
    for(let i = 0; i< s.length;i++){
        if(map.has(s[i])){
            stack.push(map.get(s[i]))
        }else if(set.has(s[i])){
            if(stack.pop()!=s[i]){
                return false
            }
        }else{

        }
    }
    if(stack.length>0){
        return false
    }else{
        return true
    }
};

顺便, 题意中没有写会有其他字母, 其实set没必要
另外, 题解中用嵌套数组创建map,可能更为合理

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

不得不说, 有的简单题出思路才是难的部分,有了思路编码毫无难度;
当然有的刚好相反

/**
 * @param {string} s
 * @return {string}
 */
 //可能一开始直接让我写我会没思路, 但告诉我用栈的时候一下就明白了,这和括号匹配实质上一样的
var removeDuplicates = function(s) {
    let stack = []
    for(let ch of s){
        if(stack.length>0&&stack[stack.length-1] == ch){
            stack.pop()
        }else{
            stack.push(ch)
        }
    }
    return stack.join('')
};

150. 逆波兰表达式求值

这道题我也做过的, 结果还是有点吃力

/**
 * @param {string[]} tokens
 * @return {number}
 */
var evalRPN = function(tokens) {
    let stack = []
    let set = new Set(['+','-','*','/'])
    for(let i = 0; i< tokens.length;i++){
        if(set.has(tokens[i])){
            let num1 = stack.pop()
            let num2 = stack.pop()
            let result = cal(num2,num1,tokens[i])
            //一开始写反了
            console.log(num2,num1,tokens[i],result)
            stack.push(result)
        }else{
            stack.push(Number(tokens[i]))
        }
    }
    return stack.pop()
};

function cal(l,r,calT){
    switch(calT){
        case '+':
            return l+r
        case '-':
            return l-r
        case '*':
            return l*r
        case '/':
            //         let res = l/r
            // return res<0?Math.round(res):Math.floor(res)
            //这里本应当是Math.ceil,结果我不知道,硬用了parseInt
            return parseInt(l/r)
            //需要非常小心地处理小数点
        default:
            console.error("error")
            return -1
    }
}
posted @ 2023-03-27 11:17  herbert_118  阅读(27)  评论(0)    收藏  举报