js关于判断算式中括号匹配的问题

学习前端有段时间了,一直没有学习过算法。在我的心中一直觉得没学习过算法的程序员不是一个合格的程序员。于是就翻看数据结构与算法这本书,看到栈的时候,提到一个有趣的
问题:如何验证一个算式中的括号否匹配。一开始很纠结,以为只要是括号成对出现,不论怎样排列都是要判断出来。例如:{(})这种括号,一直钻到这个牛角尖中出不来。
后来仔细一想是算式中,有哪个算式会有这么奇葩的括号组合。瞬间被自己的傻给折服啦。
JS中有自己的栈数据结构,因此不必自行设计一个栈机制出来,不过我还是想把如何用数组基本的数据结构实现栈给写出来:

function Stack(){
    this.top=0;
    this.dataStore=[];
    this.push=push;
    this.pop=pop;
    this.length=length;
    this.clear=clear;
}
function push(element){
this.dataStore[this.top++]=element;
}
function pop(){
return this.dataStore[--this.top];
}
function length(){
return this.top;
}
function clear(){
this.top=0;
}

上面就通过数组实现了一个栈;下面就通过栈来实现算式括号匹配的算法

function mate(equation){
var s=new Stack();
var transNum;
for(var i=0;i<equation.length;i++){
switch(equation[i]){
case "(":
s.push(equation[i]);
break;
case "[":
s.push(equation[i]);
break;
case "{":
s.push(equation[i]);
break;
case ")":
transNum=s.pop();
if(transNum!="(") return false;
break;
case "]":
transNum=s.pop();
if(transNum!="]") return false;
break;
case "}":
transNum=s.pop();
if(transNum!="}") return false;
break; 
} 
}
if(s.length()==0){
return true;
}else{
return false;
}
}

以上算法就实现了算式括号匹配问题,写出来之后我又上网搜了其他人的一些算法。有使用正则
把算式中的所有括号都匹配出来再遍历的。其实核心都一样,都是利用栈机制。
遍历算式当碰到算式中的( , [ 或 {时,将其压入栈中,当遍历到) , ] 或 }时,将栈中已
有的元素弹出与之匹配,最后栈的长度为0说明括号全部匹配。以上内容是己拙见,有错误还请各
位大牛指出,谢谢!!!

    原文作者:括号匹配问题
    原文地址: https://blog.csdn.net/AndyMercy/article/details/71703767
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞