JS简单实现括号匹配问题

1.首先要有一个运行js的编译环境,综合简单暴力的原则,我们用sublime配置一个node.js的环境,这个百度很多,无论是win,mac,还是linux,请自行百度。


2.示例代码

var moduleJson = {//括号匹配模板,你可以增加别的匹配,比如“{}”,“<>”,等,只需写入moduleJson里面去  
    ")":"(",  
    "]":"["  
  
}  
  
var testStr = "([()]())()()";//测试字符串  
var tempSaveArray = [];//用于存储字符串的数组  
for(var i = 0;i<testStr.length;i++){//如果存在括号字符,就加入数组  
    for(var key in moduleJson){  
        if(testStr[i] == key||testStr[i]==moduleJson[key]){//如果字符串中存在json中的key 和value字符,就加入数组  
            tempSaveArray.push(testStr[i]);  
        }  
    }  
}  
if(tempSaveArray.length){  
    if((tempSaveArray.length%2)!=0){//如果括号的长度为奇数,肯定不匹配  
        console.log("括号不匹配");  
    }else{//如果字符串括号长度为偶数,就进行遍历数组,进行判断 12345  0 4  

        for(var j = 0;j<tempSaveArray.length;j++){
            //(((())))
            if(moduleJson[tempSaveArray[j]]){//如果是右括号,就和前一个进行匹配。
                //拿到数组前一位的字符,是否与自己匹配
                if(j>0){
                    console.log("前一个元素:"+j+tempSaveArray[j-1]+" 后一个元素"+moduleJson[tempSaveArray[j]]); 
                    console.log(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]);
                    if(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]){//说明两个括号进行了匹配,让其出栈
                            tempSaveArray.splice(j-1,2);
                            j=0;//从新遍历数组
                    }
                }  
            }
        } 

        if(tempSaveArray.length){//没有移除完毕
            console.log("括号不匹配");
        } else{
            console.log("括号匹配,恭喜你语法正确!"); 
        }
    }  
}else{  
    console.log("你输入的字符串不存在括号");  
} 




3.算法简述
a:遍历输入测试的字符串,模板括号字符加入数组(用于最后进行比较判断);
b:遍历字符串数组,先进行判断长度为空,在进行判断是否为奇偶数,如果是偶数,就进行下一步,比较算法为:遍历字符串数组,如果是右括号,就让它和前面一位的字符进行匹配,匹配成功就移除掉两个元素,然后从头遍历。匹配不成功就接着往下循环。如果到最后数组的元素长度为空,那么完全匹配,如果还有元素,就说明匹配不成功

4.over~~~



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值