Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

343
Views
Paréntesis válidos. Da un booleano incorrecto (problemas de JS en LeetCode)

Intentando resolver un problema en LeetCode llamado "Paréntesis válidos".

Las condiciones son:

Dada una cadena que contiene solo los caracteres '(', ')', '{', '}', '[' y ']', determine si la cadena de entrada es válida.

Una cadena de entrada es válida si:

Los corchetes abiertos deben cerrarse con el mismo tipo de corchetes. Los corchetes abiertos deben cerrarse en el orden correcto.

Escribí una función y está funcionando en este fragmento:

 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))

La función da un resultado correcto (booleano) Pero cuando ejecuto este código en LeetCode por alguna razón, el mismo código me da un valor booleano incorrecto.

No entiendo lo que está mal.

 /** * @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; } };

¿Algún consejo?

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

En LeetCode, el parámetro de función es una cadena, pero en sus pruebas está pasando una matriz, y también su código de función espera una matriz, ya que accede a la cadena con s[0] , en lugar de s .

Sin relación, pero:

  • Su código falla cuando la entrada es solo un paréntesis de cierre. Esto se debe a que su ciclo no se rompe con el return false cuando se encuentra un paréntesis de cierre que no coincide. Esto debería suceder en la parte else de if (bracketsArray[stack[stack.length-1]] == s[i]) {

  • No use una variable no declarada i , que implícitamente se convertirá en una variable global (si se ejecuta en modo no estricto).

  • No nombre su variable bracketsArray ya que no es una matriz.

  • Haga más uso de ese objeto, en lugar de hacer tres comparaciones con paréntesis de apertura.

  • El if...then final es una exageración para simplemente devolver el valor de una expresión booleana.

Asi que:

 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

about 4 years ago · Juan Pablo Isaza Report

0

La forma en que está accediendo al carácter actual de la iteración es incorrecta. En lugar de hacer s[0][i] , simplemente haz s[i] .

s[0][i] accede al primer carácter y luego intenta obtener la i-ésima entrada (que no está definida).

 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
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!