程式碼隨想錄演算法訓練營第第11天 | 20. 有效的括號 、1047. 刪除字串中的所有相鄰重複項 、150. 逆波蘭表示式求值

YuanYF6發表於2024-05-18

今天的題主要是關於棧的,比較簡單,一次性過
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];
};

相關文章