javscript中变量的存储有
堆存储
和栈存储
,堆存储通常是引用数据类型,如:对象、数组...的存储。栈存储是基本数据类型变量的存储,如:字符串、数字、布尔类型的存储。栈存储的特点之一:先进后出。相比堆存储则是无序存储(根据引用地址直接获取)
栈:先进后出
入栈:可以理解为数组的push方法。入栈顺序 [1,2,3,4]
出栈:可以理解为数组的pop方法.出栈顺序 4,3,2,1。例如4出栈,[1,2,3]
leetCode20题:有效的括号
题目:
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
leetcode20(有效的括号)链接:leetcode-cn.com/problems/va… 解题思路:
所使用到的原理:栈的先进后出原理
、数组的pop()方法
、数组的push()方法
定义一个stack空数组,循环目标字符串,如果目标字符串是'{'、'['、'(',存储到stack中,如果不是,那么判断stack的最后一位字符串是否与当前的字符串所匹配,匹配:使用pop()方法删除stack中最后一位,不匹配继续循环。最后判断stack.length是否为0 ,如果等于0,则返回true,否则返回false
复杂度:时间复杂度O(n)、空间复杂度O(n)
let isValid = function(s){
let stack = []
for(let i = 0;i<s.length;i++){
if(s[i] === '(' || s[i] === '{' || s[i] === '['){
stack.push(s[i])
}else{
let end = stack[stack.length - 1]
if(s[i] === ')' && end === '(' ||
s[i] === ']' && end === '[' ||
s[i] === '}' && end === '{'){
stack.pop()
}else{
return false
}
}
}
return stack.length === 0
}