手记

【学习打卡】第1天 数据结构之“栈”

课程名称:JavaScript版数据结构与算法
课程章节:第3章 数据结构之“栈”
主讲老师:lewis

课程内容:

今天学习的内容包括:
3-1 栈简介——可以用Array实现栈,后进先出规则。
3-2 什么场景下用栈——后进先出场景,比如十进制转二进制、判断字符串的括号是否有效、函数调用堆栈等。
3-3 LeetCode:20.有效的括号——使用栈特性实现判断 “括号” 字符串是否有效。

课程收获:

如何使用Array实现一个栈的入栈出栈呢?

const stack = [];  
  
stack.push(1); // 入栈  
stack.push(2); // 入栈  
  
const item1 = stack.pop(); // 出栈 2先出  
const item2 = stack.pop(); // 出栈 1再出  

有效的括号:

有效字符串需满足:
1.左括号必须用相同类型的右括号闭合。
2.左括号必须以正确的顺序闭合。

使用栈的后进先出正好可以判断是否有效:
1.新建一个栈。
2.扫描字符串,遇左括号入栈,遇到和栈顶括号类型匹配的右括号就出栈,类型不匹配直接判定为不合法。
3.最后栈空了就合法,否则不合法。

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    if(s.length%2===1) return false
    const stack = []
    for(let i =0;i<s.length;i++){
        const c = s[i]
        if(c === '(' || c === '{' || c === '['){
            stack.push(c)
        }else{
            const t = stack[stack.length-1]
            if(
                (t==='(' && c === ')') ||
                (t==='{' && c === '}') ||
                (t==='[' && c === ']')
            ){
                stack.pop()
            }else{
                return false
            }
        }
    }
    return stack.length === 0
};

执行用时: 56 ms , 在所有 JavaScript 提交中击败了 91.74% 的用户
内存消耗: 42 MB , 在所有 JavaScript 提交中击败了 18.03% 的用户

还有很大的提升空间,感受到了算法的魅力,还需继续学习算法,以便后续写出优质的代码。

学习需要坚持,昨天就忘记打卡了,今天重新来过😭 ~

坚持打卡,坚持学习!明天见💪~

0人推荐
随时随地看视频
慕课网APP