試圖在 LeetCode 上解決一個名為“有效括號”的問題。
條件是:
給定一個僅包含字符 '(', ')', '{', '}', '[' 和 ']' 的字串 s,確定輸入字串是否有效。
輸入字串在以下情況下有效:
開括號必須用相同型別的括號閉合。開括號必須以正確的順序閉合。
我寫了一個函式,它在這個片段中作業:
let arr = ['()']
var isValid = function (data) {
let stack = [];
const bracketsArray = {
'{':'}',
'[':']',
'(':')'
}
for (i=0; i < data[0].length; i ) {
if (data[0][i] == '{' || data[0][i] == '(' || data[0][i] == '[') {
stack.push(data[0][i]);
} else if (data[0][i] == '}' || data[0][i] == ']' || data[0][i] == ')') {
if (bracketsArray[stack[stack.length-1]] == data[0][i]) {
stack.pop()
}
}
}
if (stack.length == 0) {
return true
} else {
return false
}
}
console.log(isValid(arr))
但是當我出于某種原因在 LeetCode 上運行這段代碼時,同樣的代碼給了我一個錯誤的答案。
不明白出了什么問題。
/**
* @param {string} s
* @return {boolean}
*/
var isValid = function(s) {
let stack = [];
const bracketsArray = {
'{':'}',
'[':']',
'(':')'
}
for (i=0; i < s[0].length; i ) {
if (s[0][i] == '{' || s[0][i] == '(' || s[0][i] == '[') {
stack.push(s[0][i]);
} else if (s[0][i] == '}' || s[0][i] == ']' || s[0][i] == ')') {
if (bracketsArray[stack[stack.length-1]] == s[0][i]) {
stack.pop()
}
}
}
if (stack.length == 0) {
return true;
} else {
return false;
}
};
有什么建議嗎?
uj5u.com熱心網友回復:
在 LeetCode 上,函式引數是一個字串,但在您的測驗中,您傳遞的是一個陣列,而且您的函式代碼也需要一個陣列,因為它使用s[0]而不是訪問字串s。
無關,但是:
當輸入只是一個右括號時,您的代碼將失敗。
return false這是因為當遇到不匹配的右括號時,您的回圈不會中斷。這應該發生else在if (bracketsArray[stack[stack.length-1]] == s[i]) {不要使用未宣告的變數
i,它會隱式成為全域變數(如果在非嚴格模式下運行)。不要命名你的變數
bracketsArray,因為它不是一個陣列。更多地使用該物件,而不是用左括號進行三個比較。
final
if...then對于僅回傳布爾運算式的值來說太過分了。
所以:
var isValid = function(s) {
const stack = [];
const brackets = {
'{':'}',
'[':']',
'(':')'
}
const closing = Object.values(brackets);
for (let ch of s) {
if (brackets[ch]) {
stack.push(brackets[ch]);
} else if (ch == stack.at(-1)) {
stack.pop()
} else if (closing.includes(ch)) {
return false;
}
}
return !stack.length;
};
console.log(isValid("{([])}")); // true
console.log(isValid("]")); // false
uj5u.com熱心網友回復:
您訪問迭代當前字符的方式是錯誤的。與其做s[0][i],不如做s[i]。
s[0][i]訪問第一個字符,然后嘗試從中獲取第 i 個條目(未定義)。
var isValid = function(s) {
let stack = [];
const bracketsArray = {
'{':'}',
'[':']',
'(':')'
}
for (i=0; i < s.length; i ) {
if (s[i] == '{' || s[i] == '(' || s[i] == '[') {
stack.push(s[i]);
} else if (s[i] == '}' || s[i] == ']' || s[i] == ')') {
if (bracketsArray[stack[stack.length-1]] == s[i]) {
stack.pop()
}
}
}
if (stack.length == 0) {
return true;
} else {
return false;
}
};
isValid("{([])}") // true
isValid("{([)}") // false
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/483688.html
標籤:javascript 功能
