JS简单实现括号匹配问题

来源:互联网 发布:2017数据竞赛有哪些 编辑:程序博客网 时间:2024/05/20 09:09
http://blog.csdn.net/u012989536/article/details/51931848

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


示例代码

[javascript] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. var moduleJson = {//括号匹配模板,你可以增加别的匹配,比如“{}”,“<>”,等,只需写入moduleJson里面去    
  2.     ")":"(",    
  3.     "]":"["    
  4.     
  5. }    
  6.     
  7. var testStr = "([()]())()()";//测试字符串    
  8. var tempSaveArray = [];//用于存储字符串的数组    
  9. for(var i = 0;i<testStr.length;i++){//如果存在括号字符,就加入数组    
  10.     for(var key in moduleJson){    
  11.         if(testStr[i] == key||testStr[i]==moduleJson[key]){//如果字符串中存在json中的key 和value字符,就加入数组    
  12.             tempSaveArray.push(testStr[i]);    
  13.         }    
  14.     }    
  15. }    
  16. if(tempSaveArray.length){    
  17.     if((tempSaveArray.length%2)!=0){//如果括号的长度为奇数,肯定不匹配    
  18.         console.log("括号不匹配");    
  19.     }else{//如果字符串括号长度为偶数,就进行遍历数组,进行判断 12345  0 4    
  20.   
  21.         for(var j = 0;j<tempSaveArray.length;j++){  
  22.             //(((())))  
  23.             if(moduleJson[tempSaveArray[j]]){//如果是右括号,就和前一个进行匹配。  
  24.                 //拿到数组前一位的字符,是否与自己匹配  
  25.                 if(j>0){  
  26.                     console.log("前一个元素:"+j+tempSaveArray[j-1]+" 后一个元素"+moduleJson[tempSaveArray[j]]);   
  27.                     console.log(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]);  
  28.                     if(moduleJson[tempSaveArray[j]]==tempSaveArray[j-1]){//说明两个括号进行了匹配,让其出栈  
  29.                             tempSaveArray.splice(j-1,2);  
  30.                             j=0;//从新遍历数组  
  31.                     }  
  32.                 }    
  33.             }  
  34.         }   
  35.   
  36.         if(tempSaveArray.length){//没有移除完毕  
  37.             console.log("括号不匹配");  
  38.         } else{  
  39.             console.log("括号匹配,恭喜你语法正确!");   
  40.         }  
  41.     }    
  42. }else{    
  43.     console.log("你输入的字符串不存在括号");    
  44. }   

t/u012989536/article/details/51931848
0 0
原创粉丝点击