Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

349
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda