数据结构栈之leetcode20(有效的括号)

127 阅读1分钟

javscript中变量的存储有堆存储栈存储,堆存储通常是引用数据类型,如:对象、数组...的存储。栈存储是基本数据类型变量的存储,如:字符串、数字、布尔类型的存储。栈存储的特点之一:先进后出。相比堆存储则是无序存储(根据引用地址直接获取)

栈:先进后出

栈.png 入栈:可以理解为数组的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
}