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 // 最后看数组是否被取空
	}

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

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值