js关于判断算式中括号匹配的问题
来源:互联网 发布:汤尼伯爵男装淘宝 编辑:程序博客网 时间:2024/05/21 22:51
学习前端有段时间了,一直没有学习过算法。在我的心中一直觉得没学习过算法的程序员不是一个合格的程序员。于是就翻看数据结构与算法这本书,看到栈的时候,提到一个有趣的
问题:如何验证一个算式中的括号否匹配。一开始很纠结,以为只要是括号成对出现,不论怎样排列都是要判断出来。例如:{(})这种括号,一直钻到这个牛角尖中出不来。
后来仔细一想是算式中,有哪个算式会有这么奇葩的括号组合。瞬间被自己的傻给折服啦。
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说明括号全部匹配。以上内容是己拙见,有错误还请各
位大牛指出,谢谢!!!
0 0
- js关于判断算式中括号匹配的问题
- 关于括号匹配问题
- 关于括号匹配问题
- coding - 关于括号匹配的问题
- 关于括号匹配的一些问题总结
- 关于括号匹配的问题及其源码
- java判断括号匹配问题
- 括号的匹配问题
- 括号的匹配问题
- 顺序栈判断表达式中括号的匹配
- 括号配对:假设一个数学算式中包括圆括号"()",方括号”[]"和花括号“{}”三种类型,编写一算法判断表达式的括号是否配对。
- 括号匹配问题(判断以及添加)
- 关于使用栈解决括号匹配的问题
- 关于第5周括号匹配问题的修改方案
- 一类关于括号匹配的问题 区间dp
- 关于js中匹配字符时遇到的问题
- 字符串中左右括号匹配判断
- PHP判断表达式中括号是否匹配
- Ajax提交HTML报错HTTP500
- 路在前方,唯有前進。
- Zookeeper系列(二十一)Zookeeper原理解析之数据存储小结
- 数组合并
- 12个非常有用的JavaScript技巧
- js关于判断算式中括号匹配的问题
- 用指定的分割符解析字符串
- TeamCity : 配置 Build 过程
- 2017·0512_ Linux 线程同步的三种方法
- 基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍
- 二十九, iOS 因为展示版本号码被拒的的问题要注意
- Java复制文件使用进度条显示
- Python: 函数与方法的区别 以及 Bound Method 和 Unbound Method
- Linux下查看支持的信号列表