我正在解決一個演算法問題,它要求我確保括號、圓括號和大括號按正確的順序或順序放置。
這是問題的鏈接,
這是我的解決方案代碼:
const isParenthesisValid = (params) => {
myList = []
lastElement = myList[myList.length - 1]
for (let i = 0; i < params.length; i ) {
if (params[i] === "(" || params[i] === "[" || params[i] === "{" ) {
myList.push(params[i])
} else if ((params[i] === ")" && lastElement === "(") || (params[i] === "]" && lastElement === "[") || (params[i] === "}" && lastElement === "{")) {
myList.pop()
} else return false
}
return myList.length ? false : true
}
// I get false as an answer everytime whether the pattern is correct or wrong
// false
console.log(isParenthesisValid("[()]"))
但是我不知道為什么我每次都會出錯,我已經將我的答案與做同樣事情的其他人的答案進行了比較,但似乎我忽略了一些不太明顯的東西。
我希望有人可以在我的代碼中指出我哪里出錯了。
uj5u.com熱心網友回復:
您在程式開始時lastElement檢索串列的最后一個元素- 當沒有這樣的元素時 - 所以它總是. 您需要取而代之的是檢索回圈內的值。undefined
const isParenthesisValid = (params) => {
myList = []
for (let i = 0; i < params.length; i ) {
const lastElement = myList[myList.length - 1]
if (params[i] === "(" || params[i] === "[" || params[i] === "{" ) {
myList.push(params[i])
} else if ((params[i] === ")" && lastElement === "(") || (params[i] === "]" && lastElement === "[") || (params[i] === "}" && lastElement === "{")) {
myList.pop()
} else return false
}
return myList.length ? false : true
}
console.log(isParenthesisValid("[()]"))
或者,更具可讀性:
const isParenthesisValid = (input) => {
const openDelimiters = [];
for (const delim of input) {
const lastElement = openDelimiters[openDelimiters.length - 1];
if (delim === "(" || delim === "[" || delim === "{") {
openDelimiters.push(delim)
} else if ((delim === ")" && lastElement === "(") || (delim === "]" && lastElement === "[") || (delim === "}" && lastElement === "{")) {
openDelimiters.pop()
} else return false
}
return openDelimiters.length === 0;
}
console.log(isParenthesisValid("[()]"))
另一種方法,將每個分隔符與一個物件鏈接:
const delims = {
')': '(',
'}': '{',
']': '[',
};
const isParenthesisValid = (input) => {
const openDelimiters = [];
for (const delim of input) {
if ('([{'.includes(delim)) {
openDelimiters.push(delim)
} else if (')]}'.includes(delim) && openDelimiters[openDelimiters.length - 1] === delims[delim]) {
openDelimiters.pop()
} else return false
}
return openDelimiters.length === 0;
}
console.log(isParenthesisValid("[()]"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/439986.html
標籤:javascript 算法
