JS简单实现括号匹配问题
2017-04-26 16:35
351 查看
http://blog.csdn.net/u012989536/article/details/51931848
算法简述
plain copy
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("你输入的字符串不存在括号");
}
t/u012989536/article/details/51931848
算法简述
a:遍历输入测试的字符串,模板括号字符加入数组(用于最后进行比较判断);
b:遍历字符串数组,先进行判断长度为空,在进行判断是否为奇偶数,如果是偶数,就进行下一步,比较算法为:遍历字符串数组,如果是右括号,就让它和前面一位的字符进行匹配,匹配成功就移除掉两个元素,然后从头遍历。匹配不成功就接着往下循环。如果到最后数组的元素长度为空,那么完全匹配,如果还有元素,就说明匹配不成功
示例代码
[javascript] viewplain copy
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("你输入的字符串不存在括号");
}
t/u012989536/article/details/51931848
相关文章推荐
- JS简单实现括号匹配问题
- 链栈的简单实现及括号匹配问题的链栈解决方法
- 用stack简单实现括号匹配
- 数据结构课程设计:括号匹配问题(实现检验匹配并输出不匹配的位置)
- Android 中 WebView 与 js 简单交互实现图文混排效果,解决图片自适应屏幕与查看大图问题
- java--一道简单的括号匹配问题
- 括号匹配问题--栈实现
- 一个简单的括号匹配问题
- tomcat服务器下使用nginx实现最简单的动静分离--解决css、js不加载的问题
- 简单的括号匹配问题,只有 ( 和 )。。。其实原理就是开栈最后的状态。。。
- 数据结构(18)栈典型问题之C++实现括号匹配
- 问题:关于贴友一个用js传递value默认值的简单实现
- 原创:Js解析xml文件并简单实现省市区级联菜单(并解决各浏览器兼容性问题).
- 括号匹配问题(顺序栈实现)
- 括号匹配问题——用栈实现
- 用栈来实现括号匹配问题
- 解决js正则匹配换行问题实现代码
- 括号匹配问题,用栈实现
- 数据结构-----栈实现括号匹配问题