es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

incrementando un conjunto si existe

Tengo una cadena “abacabad” que se pasa a mi función como “s”.

Lo que quiero hacer:

  • Crear un nuevo conjunto.
  • Recorrer cada letra de la cadena. Si la letra existe, la incremento en 1.
  • Si no existe, creamos el conjunto inicializándolo en 1.

Lo que mi código está registrando:

Set(0) { a: 1, b: 1, c: 1, d: 1 }

Lo que debería estar registrando:

Set(0) { a: 4, b: 2, c: 1, d: 1 }

Código:

function solution(s) {
  arr = new Set()
  for (e of s) {
    if (e in arr) {
      arr[e]++;
    }
    if (arr.has(e) == false) {
      arr[e] = 1;
    }
  }
  console.log(arr)
}

solution('abacabad');
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Hay algunos problemas con la implementación actual de la función solution():

    • arr se inicializa como un Set, pero debería inicializarse como un objeto plano ({}), ya que queremos realizar un seguimiento del recuento de cada letra.
    • Comprobar si e existe en arr utilizando el operador in no funciona para objetos planos. En su lugar, podemos usar arr.hasOwnProperty(e) o e in arr.
    • Cuando e no existe en arr, deberíamos agregarlo con un recuento de 1, no como una propiedad con valor 1.

    Aquí tienes una implementación actualizada que debería lograr el comportamiento deseado:

    function solution(s) {
      const counts = {};
      for (const e of s) {
        if (counts.hasOwnProperty(e)) {
          counts[e]++;
        } else {
          counts[e] = 1;
        }
      }
      const countEntries = Object.entries(counts);
      const countSet = new Set(countEntries);
      console.log(countSet);
    }
    
    solution('abacabad');
    // Salida: Set(4) { [ 'a', 4 ], [ 'b', 2 ], [ 'c', 1 ], [ 'd', 1 ] }
    

    Esta implementación utiliza un objeto plano counts para realizar un seguimiento del recuento de cada letra. Recorremos la cadena s, y para cada letra e, comprobamos si existe en counts. Si lo hace, incrementamos su recuento. Si no existe, lo agregamos con un recuento de 1.

    Después de contar las letras, convertimos counts en una matriz de pares [clave, valor] utilizando Object.entries(), y luego creamos un nuevo Set a partir de esos pares utilizando new Set(countEntries).

    La salida de console.log(countSet) debería ser Set(4) { [ 'a', 4 ], [ 'b', 2 ], [ 'c', 1 ], [ 'd', 1 ]}, que coincide con la salida deseada.

Comments are closed.