课程名称: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% 的用户
还有很大的提升空间,感受到了算法的魅力,还需继续学习算法,以便后续写出优质的代码。
学习需要坚持,昨天就忘记打卡了,今天重新来过😭 ~
坚持打卡,坚持学习!明天见💪~