我有以下代码:var isValid = function(s) { let arr = [...s]; arr.reduce((acc, cur) => { console.log(`arr in reduce: ${arr}`); console.log(`acc: ${acc}`); console.log(`cur: ${cur}`); if ((acc && cur) && ( (acc === '(' && cur === ')') || (acc === '{' && cur === '}') || (acc === '[' && cur === ']') )) { arr.splice(arr.indexOf(acc), 2); console.log(`arr after splice: ${arr}`); return arr; } else { console.log(`else statement: ${cur}`); return cur; } }); return arr.length === 0 ? true : false;};console.log(isValid("()[]{}"));如果满足以下条件,则需要返回true:开括号必须用相同类型的括号封闭。开括号必须以正确的顺序关闭。我的代码未通过此测试"()[]{}":它总是返回[,]并且我不明白为什么。我已经尝试使用正则表达式,anscii作为方括号,但是它不起作用。
2 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
您可以使用一个对象作为预期的结束字符,如果找到了一个开放字符,则将预期的结束字符推入堆栈。
否则,请对照该字符检查弹出的值。
var isValid = function([...array]) {
var stack = [],
open = { '(': ')', '[': ']', '{': '}' };
return array.every(c => c in open ? stack.push(open[c]) : c === stack.pop())
&& !stack.length;
};
console.log(isValid("()[]{}"));
console.log(isValid("(({}[()]))[]{}"));
console.log(isValid("()[]{}}"));
console.log(isValid("["));
添加回答
举报
0/150
提交
取消