(1+(2+3)*(3+(8+0))+1-2)这是一个简单的数学表达式,今天不是计算它的值,而是比较它的括号匹配是否正确。
前面这个式子可以简化为(()(()))这样的括号我们认为它是匹配正确的,
而((())这样的我们就说他是错误的。注意括号里面的表达式可能是错的,也可能有多个空格,对于这些我们是不用去管的,
我们只关心括号是否使用正确。
输入
给出一行表达式(长度不超过 100)。
输出
如果匹配正确输出括号的对数,否则输出-1。
样例
示例 1 输入输出示例仅供调试,后台判题数据一般不包含示例
输入
(1+(2+3)*(3+(8+0))+1-2)
输出
4
function resolve(str = "(1+(2+3)*(3+(8+0))+1-2)") {
let arr = str.split("").filter(item => item === "(" || item === ")");
console.log(arr.join(""));
let res = [];
let flag = true;
let reduce = 0;
for (let i = 0; i < arr.length; i++) {
if (arr[i] === "(") {
res.push("(")
}
if (arr[i] === ")" && res[res.length - 1] === "(") {
res.length = res.length - 1;
reduce++;
} else if (arr[i] === ")" && res[res.length - 1] !== "(") {
flag = false;
break;
}
}
if (flag && res.length === 0) {
console.log(reduce);
} else {
console.log(-1);
}
}
resolve();