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

208
Vistas
¿Por qué mi código no funciona bien reemplazando caracteres de cadenas?

El ejercicio: El objetivo de este ejercicio es convertir una cadena en una nueva cadena donde cada carácter en la nueva cadena es "(" si ese carácter aparece solo una vez en la cadena original, o ")" si ese carácter aparece más de una vez en la cadena original. Ignore las mayúsculas al determinar si un carácter es un duplicado.

Ejemplos "din" => "((("

"retroceder" => "()()()"

"Éxito" => ")())())"

"((@" => "))(("

Mi código era así:

 function duplicateEncode(word) { let str = ""; for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string; for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself continue; } else if (word[i] === word[j]) { str = str + ")"; break; } else if (j !== word.length - 1) { continue; } else if (j === word.length - 1) { str = str + "("; } } } return str; }

¿Alguien me puede ayudar a averiguar por qué no funciona para todos los casos?

Por ejemplo:

 console.log(duplicateEncode("abc"));

Debería devolver ((( en lugar de ((

Pero,

 console.log(duplicateEncode("mulherm"));

devuelve exactamente lo que se suponía: )((((()

Aparentemente, cada vez que una cadena no tiene un carácter que se repita, la función devuelve una cadena sin el primer elemento. Pero cada vez que la cadena tiene al menos un elemento que se repite, devuelve exactamente lo que se supone que debe hacer.

¿Qué está pasando con mi código?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Creo que el problema es que cuando usa su fragmento a continuación, evita ingresar al último bucle.

 if (j === i) { continue; }

El problema está presente cada vez que una palabra con una letra no duplicada es la última. es decir

Esto funciona

 console.log(duplicateEncode("aba")); //returns )()

Esto no lo hace

 console.log(duplicateEncode("aab")); //returns ))

Lo que podría hacer es agregar una declaración de que cuando

 i === word.length - 1

y no hay "(" en su variable str , puede agregar otro ")" a su str.

En otras palabras, si no ha encontrado caracteres duplicados después de verificar la última posición anterior al iterar sobre toda la palabra, se garantiza que la última también será única.

Registros de la consola a continuación

 function duplicateEncode(word) { let str = ""; for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string; for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition console.log(i); console.log(j); console.log(str); if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself console.log("continue") continue; } else if (word[i] === word[j]) { console.log("append )") str = str + ")"; break; } else if (j !== word.length - 1) { console.log("j !== length") continue; } else if (j === word.length - 1) { console.log("append (") str = str + "("; } } } return str; }
about 4 years ago · Juan Pablo Isaza Denunciar

0

Use un depurador para recorrer su código línea por línea. Hay casos en los que el ciclo interno se completa sin cumplir nunca una de las condiciones para agregar un carácter a la cadena.

En su lugar, use un indicador booleano para indicar si la letra está duplicada, configúrelo dentro del bucle (lógica mucho más simple), luego, después del bucle, haga str += (found ? ')' : '('); . Esto garantiza que agregue exactamente un carácter a la cadena de salida por iteración del ciclo externo.

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