javascript - 如何检查字符串中左括号和右括号的顺序?
问题描述
需要查找开闭括号,如果违反了开闭括号的顺序,则返回false。
但是如果不恢复右数组以与左数组进行比较,我不会在这里制作检查括号{[(3+1)+2]+}
。如果像现在这样反转,那么我无法在这里检查[1+1]+(2*2)-{3/3}
function brackets(expression){
let leftArr=[];
let rightArr = [];
for(let i=0; i<expression.length; i++){
if(expression[i] === '(' || expression[i] === '[' || expression[i] === "{"){
leftArr.push(expression[i]);
}
if(expression[i] === ')'){
rightArr.push("(");
}else if(expression[i] === '}'){
rightArr.push("{");
} else if(expression[i] === ']'){
rightArr.push("[");
}
}
rightArr.reverse();
if(leftArr.length<rightArr.length || leftArr.length>rightArr.length){
return false;
}
for(let k=0; k<leftArr.length; k++) {
if(leftArr[k] != rightArr[k]){
return false;
}
}
return true;
}
console.log(brackets('(3+{1-1)}')); // false
console.log(brackets('{[(3+1)+2]+}')); //true
console.log(brackets('[1+1]+(2*2)-{3/3}')); //true
console.log(brackets('(({[(((1)-2)+3)-3]/3}-3)')); //false
解决方案
在最短的时间内,对可能让您感到困惑的行进行注释。
function check(expr){
const holder = []
const openBrackets = ['(','{','[']
const closedBrackets = [')','}',']']
for (let letter of expr) { // loop trought all letters of expr
if(openBrackets.includes(letter)){ // if its oppening bracket
holder.push(letter)
}else if(closedBrackets.includes(letter)){ // if its closing
const openPair = openBrackets[closedBrackets.indexOf(letter)] // find its pair
if(holder[holder.length - 1] === openPair){ // check if that pair is the last element in the array
holder.splice(-1,1) // if so, remove it
}else{ // if its not
holder.push(letter)
break // exit loop
}
}
}
return (holder.length === 0) // return true if length is 0, otherwise false
}
check('[[{asd}]]') /// true
推荐阅读
- python - else: under if: in python的对齐方式
- c# - Polly .Net 使用 IHostApplicationLifetime 优雅地关闭应用程序
- sql - 如何在 XML 中将常量添加到我的根目录?
- python - 带有嵌套字典值/参数的 Python POST 请求
- sql - 动态增加数组的大小
- orocommerce - Oro PriceList 业务单位所有权
- vba - 更改 Visio 形状名称以匹配用户输入的形状数据
- c++ - 在 GCC 10.3.0 中找不到 _mm256_rem_epu64 内在函数
- html - 根据 created() 数据打开/关闭多个切换按钮
- javascript - Apexcharts - 在 jsfiddle 中运行 - 但不是我的 PC