JS简单实现括号匹配问题
2016-07-17 13:09
351 查看
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~~~
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解