为了账号安全,请及时绑定邮箱和手机立即绑定

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

标签:
JavaScript

课程名称: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% 的用户

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

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

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

https://img3.sycdn.imooc.com/62ea7fed0001494919200892.jpg

https://img1.sycdn.imooc.com/62ea80910001a5a219200892.jpg

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消