下面是我的代码,它适用于一些字符串,但不是所有.例如:“()()()()()(“预期为false,我的代码返回true。
function validParentheses(parens){
var stack = [];
parens.split('').map((cur, index) =>{
if(stack.length === 0 || stack[index-1] === cur) stack.push(cur);
else stack.pop();
});
return stack.length > 0 ? false : true;
}
5条答案
按热度按时间zysjyyx41#
stack[index - 1]
将有效,只要你推送每一次迭代。在弹出一个元素的情况下,递增的索引将总是超出界限。将其更改为
stack.length - 1
以始终获取最后一个元素,而不管推入或弹出的是什么。esyap4oy2#
对于每个“(”,必须有一个")“。因此,您需要一个计数器来查看是否存在完全匹配
yftpprvb3#
对于堆栈长度大于0的情况:
fkaflof64#
在
stack[index-1] === cur
中,比较字符是否与存储在堆栈中的字符不同,所以)(相反的括号将有效你可以试着这样做
wztqucjr5#
您还需要检查最后添加的值,因为未解析的右括号应该保留在堆栈中。
顺便说一句,
Array#forEach
是选择的方法,因为Array#map
返回一个新的数组,这里没有使用。