【发布时间】:2022-01-24 00:40:26
【问题描述】:
实现函数 verify(text) 验证文本中的括号是否正确嵌套。您需要考虑三种:()、[]、,并且只有这几种。例子:
verify("---(++++)----") -> 1
verify("") -> 1
verify("before ( middle []) after ") -> 1
verify(") (") -> 0
verify("<( >)") -> 0
verify("( [ <> () ] <> )") -> 1
verify(" ( [)") -> 0
我试着按照下面的方法做,但面试官告诉我有一个错误,并给了我第二次机会。
function verify(text) {
const stack = [];
for (const c of text) {
if (c === '(') stack.unshift(')')
else if (c === '[') stack.unshift(']')
else if (c === '<') stack.unshift('>')
else if (c === stack[0]) stack.shift()
else if (c === ')' || c === ']' || c === '>') return 0
}
return 1
}
const test_inputs = ["---(++++)----", "", "before ( middle []) after ", ") (", "<( >)", "( [ <> () ] <> )", " ( [)"]
for (const i in test_inputs) {
console.log(verify(i))
}
输出是:
1
1
1
1
1
1
1
【问题讨论】:
-
测试代码错误。
for (const i in test_inputs)应该是for (const i of test_inputs) -
没有人会为你解决面试问题。你试过什么?什么不工作?你认为什么不起作用,或者你不明白什么?如果您有具体问题,我们可以提供帮助。
-
你的函数没有
return 1声明,我看不出它怎么会产生你说的结果。 -
你的逻辑非常错误。如果
stack为空,则应在尝试取消移位时返回0。循环结束后,如果数组为空则返回1,否则返回0。 -
@KevinHooke 他的尝试被展示出来了,它只是没有像 OP 声称的那样。
标签: javascript arrays parentheses