實作函式 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
uj5u.com熱心網友回復:
您的代碼唯一錯誤的是,您使用了inint for 回圈而不是of.
或者忘記做verify(test_inputs[i])而不是verify(i).
解決這個問題,它會產生正確的結果:
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 s of test_inputs) {
console.log(verify(s), s)
}
uj5u.com熱心網友回復:
我們可以使用Array的pop和push函式。當我們遇到'(', '[', '<'字符時,我們壓入堆疊。另一方面,當我們遇到')', ']', '>'時,我們彈出堆疊的最后一個元素. 如果我們找不到這些字符的等價物,我們就確定該字串無效。最后,如果堆疊中沒有元素,這意味著該字串是有效的。
function verify(text) {
let stack = [];
for (const c of text) {
if (c === '(' || c == '[' || c == '<') {
stack.push(c);
} else if (c === ')' || c == ']' || c == '>') {
if (stack.length == 0) {
return 0;
}
const popValue = stack.pop();
if (c === ')' && popValue != '(') {
return 0;
} else if (c === ']' && popValue != '[') {
return 0;
} else if (c === '>' && popValue != '<') {
return 0;
}
}
}
if (stack.length > 0) {
return 0;
}
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/390688.html
標籤:javascript 数组 括弧
上一篇:錯誤:LoadError:MethodError:沒有方法匹配Array(::Type{Int8},::Int64,::Int64,::Int64)
