js关于判断算式中括号匹配的问题
2017-05-12 09:45
459 查看
学习前端有段时间了,一直没有学习过算法。在我的心中一直觉得没学习过算法的程序员不是一个合格的程序员。于是就翻看数据结构与算法这本书,看到栈的时候,提到一个有趣的
问题:如何验证一个算式中的括号否匹配。一开始很纠结,以为只要是括号成对出现,不论怎样排列都是要判断出来。例如:{(})这种括号,一直钻到这个牛角尖中出不来。
后来仔细一想是算式中,有哪个算式会有这么奇葩的括号组合。瞬间被自己的傻给折服啦。
JS中有自己的栈数据结构,因此不必自行设计一个栈机制出来,不过我还是想把如何用数组基本的数据结构实现栈给写出来:
上面就通过数组实现了一个栈;下面就通过栈来实现算式括号匹配的算法
以上算法就实现了算式括号匹配问题,写出来之后我又上网搜了其他人的一些算法。有使用正则
把算式中的所有括号都匹配出来再遍历的。其实核心都一样,都是利用栈机制。
遍历算式当碰到算式中的( , [ 或 {时,将其压入栈中,当遍历到) , ] 或 }时,将栈中已
有的元素弹出与之匹配,最后栈的长度为0说明括号全部匹配。以上内容是己拙见,有错误还请各
位大牛指出,谢谢!!!
问题:如何验证一个算式中的括号否匹配。一开始很纠结,以为只要是括号成对出现,不论怎样排列都是要判断出来。例如:{(})这种括号,一直钻到这个牛角尖中出不来。
后来仔细一想是算式中,有哪个算式会有这么奇葩的括号组合。瞬间被自己的傻给折服啦。
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说明括号全部匹配。以上内容是己拙见,有错误还请各
位大牛指出,谢谢!!!
相关文章推荐
- 关于js获得ckeditor为空判断的问题
- 关于js中匹配字符时遇到的问题
- 关于js中的贪婪匹配的问题
- 关于JS中各进制转换问题
- js 关于this的一些语法问题
- 关于js文件中的中文问题
- 突然想起的一个简单而好玩的关于js和vbs的反射问题
- 关于asp.net中js文件中文显示支持的问题。
- 关于一个表达式判断2的幂的问题
- 关于JS的调试问题(给所有的程序员)
- 关于判断sql查询记录集为空的问题
- JS中关于对内存的释放问题[待续]
- 解决图片显示比例匹配问题,我个人建议用js重新定义长宽
- 关于goto语句能不能从复杂的嵌套循环判断中跳出去的问题讨论
- 关于字符串的匹配搜索问题
- 利用栈结构判断括号匹配问题
- 问题-关于JS中图片预加载
- 关于CutString截取时字符串不够如何判断的问题
- [导入]JS里关于链接的小问题。
- 关于文本框单行 多行 最大长度判断的问题