js判断输入的括号的合法性

话不多说,直接上代码,注释非常清晰!


// 判断输入的括号是否是合法的
function isVaild (str){
//判断输入的括号个数是否为偶数,如果不是偶数直接返回false
    if(str.length%2 != 0){
        return false
    }
    //判断输入的最后一个是否为右括号,如果为左括号直接false
    else if(str[str.length-1] == "(" || str[str.length-1] == "{" || str[str.length-1] == "["){
        return false
    }
    //判断输入的第一个是否为左括号,如果是右括号直接返回false
	else if(str[0] == "}" ||str[0] == ")" ||str[0] == "]"){
        return false
    }else{
    //定义一个临时数组来存放
        let arr = [];
        //首先循环遍历输入的每个括号
        for(let i = 0;i<str.length;i++){
        //对每个括号进行判断
            switch (str[i]) {
            //如果为右括号就判断arr数组的最后一个是否是相同类型的左括号,
            //如果是的话就讲arr数组的左括号删除,并且跳出当前for循环,目的是
            //不让后面的arr.push()运行
                case ")":
                    if(arr.slice(-1) == "("){
                        arr.pop()
                        continue
                    }
                    break;
                case "}":
                    if(arr.slice(-1) == "{"){
                        arr.pop()
                        continue
                    }
                    break;
                case "]":
                    if(arr.slice(-1) == "["){
                        arr.pop()
                        continue
                    }
                    break;
            }
            //如果上面的条件都不符合 也就是说输入的是左括号,或者
            //输入的是右括号,但是,arr数组的最后一个标签无法预期配对
            //就将输入的括号添加至数组arr
                arr.push(str[i])
            
        }
        //最后判断,如果arr数组的长度为0,就表示上面全部匹配成功,就表示
        //输入的括号是合法的
        if(arr.length == 0 ){
            return true
        }
		//数组长度不为0,就表示输入的不是合法的
		else{
            return false
        }
    }
}

方案2

/**
 * @param {string} s
 * @return {boolean}
 */
var isValid = function(s) {
    const obj ={
        "(":")",
        "{":"}",
        "[":"]"
    } 
    let stack = [];
    for(let i =0;i<s.length;i++){
        if(s[i] in obj ){
            stack.push(s[i])
        }else if(s[i] !== obj[stack[stack.length - 1]]){
            return false
        }else{
            stack.pop()
        }
    }
    return stack.length === 0 
};
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值