3、JS实现有效括号

82 阅读1分钟

题目

给定一个只包括 '('')''{''}''['']' 的字符串 s ,判断字符串是否有效。 有效字符串要满足:

  1. 左括号必须用相同类型的右括号闭合。
  2. 左括号必须以正确的顺序闭合。
  3. 每个右括号都有一个对应的相同类型的左括号。

思路

  1. map记录括号匹配规则,左括号为key,右括号为value
  2. 定义一个栈,遍历字符串,遇到左括号就压栈,遇到右括号,就和栈顶元素比较是否符合map里的规则
  3. 如果符合,就弹出栈顶元素,否则,不匹配,return false
  4. 如果遍历字符串,没有遇到栈顶与当前右括号不匹配的情况,并且遍历完字符串后,栈内 所有左括号都出栈了,return true

代码

var isValid = function(s) {

    //使用栈和map实现

    //遇到左括号入栈,遇到右括号就把栈顶左括号取出

    //判断是否匹配

    //匹配则继续,否则false

    let stack=[]

    let map=new Map()

    map.set('(',')')

    map.set('{','}')

    map.set('[',']')

    for(let i=0;i<s.length;i++){

        //遇到左括号

        if(map.has(s[i])){

            stack.push(s[i])

        }else{

            //遇到右括号,取出栈顶元素,

            //判断

            if(s[i]===map.get(stack[stack.length-1])){

                //匹配成功,取出栈顶元素

                stack.pop()

            }else{

                return false

            }

        }

    }

  


    return stack.length==0

   

};