JS判断包含()[]{}的字符串是否为有效闭合括号

JS判断包含()[]{}的字符串是否为有效闭合括号

一、定义

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

左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。

示例 1:

输入: "()"
输出: true

示例 2:

输入: "()[]{}"
输出: true

示例 3:

输入: "(]"
输出: false

示例 4:

输入: "([)]"
输出: false

示例 5:

输入: "{[]}"
输出: true

二、两种方法

  1. 从字符串最中心一对入手,简单粗暴 ,判断其是否为有效括号对,是就置换为空
   function bracketCheck1(str){
      if(!str || typeof str !== 'string'){ // 入参是否有效
           return false
       }
       str = str.replace(/\s/g, '') // 去空
       if(str.length % 2 !== 0){ // 长度为偶数才行
           return false
       }
       while(str.includes('{}') || str.includes('[]') || str.includes('()')){
           str = str.replace('{}','')
           str = str.replace('[]','')
           str = str.replace('()','')
       }
       return str === '' // 最后看字符串是否为空
   }
  1. 利用数组,先进后出, 是左括号就把对应的右括号存入数组,不是左括号就从数组取出一位与其比较
    function bracketCheck2(str){
       if(!str || typeof str !== 'string'){ // 入参有效
            return false
        }
        str = str.replace(/\s/g, '') // 去空
        if(str.length % 2 !== 0){ // 长度为偶数才行
            return false
        }
        const obj = {'(': ')', '[': ']', '{': '}'}
        const arr = []
        for(let i = 0; i < str.length; i ++){
            if(str[i] === '{' || str[i] === '[' || str[i] === '('){ // 是有效左括号
                // 就把相对应的右括号加入数组
                arr.push(obj[str[i]])
            }else{ // 非左括号
                if( arr.length === 0 ){
                    // 数组为空直接返回false
                    return false
                }else{
                    // 截取数组最后一位,与当前字符串比较
                    let p = arr.pop()
                    if(p !== str[i]){
                        // 不同就返回false
                        return false
                    }
                }
            }
        }
        return arr.length === 0 // 最后看数组是否被取空
    }

以上,如有谬误,敬请指正!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容