← JavaScript

Coding challenge

count how many times each character appears in a string.

Challenge: count how many times each character appears in a string.
Input: "banana"
Expected output: { b: 1, a: 3, n: 2 }
Show solution
// Reto: contar cuántas veces aparece cada caracter en un texto.
// Entrada: "banana"
// Salida esperada: { b: 1, a: 3, n: 2 }

// Solución: iteramos el texto y usamos un objeto como contador.
// Por cada caracter, sumamos 1 a su conteo (o empezamos en 1 si es nuevo).
function contarCaracteres(texto) {
  const conteo = {};
  for (const caracter of texto) {
    conteo[caracter] = (conteo[caracter] || 0) + 1;
  }
  return conteo;
}

// Versión alternativa con reduce (misma idea, distinta sintaxis).
function contarConReduce(texto) {
  return [...texto].reduce((acc, caracter) => {
    acc[caracter] = (acc[caracter] || 0) + 1;
    return acc;
  }, {});
}

console.log(contarCaracteres("banana"));   // { b: 1, a: 3, n: 2 }
console.log(contarCaracteres("aabbc"));    // { a: 2, b: 2, c: 1 }
console.log(contarConReduce("hola"));      // { h: 1, o: 1, l: 1, a: 1 }
console.log(contarCaracteres(""));         // {} (caso límite: texto vacío)

// Explicación:
// conteo[caracter] || 0 devuelve el conteo actual, o 0 si el caracter
// todavía no existe en el objeto. Sumamos 1 y lo guardamos. Así vamos
// acumulando la frecuencia de cada caracter.

module.exports = { contarCaracteres, contarConReduce };