Contador de Cadenas de Email - FreeCodeCamp #135 Daily Challenge

1 min

📨 Enunciado del Problema

Dado un string que representa el asunto de un email, determina cuántas veces fue reenviado o respondido. Contamos como reenviado o respondido si el string contiene alguno de estos prefijos (sin importar mayúsculas/minúsculas):

  • FWD:
  • FW:
  • RE:

🔎 Análisis Inicial

El reto consiste en identificar y contar cuántas veces aparecen los prefijos típicos de reenvío o respuesta en el asunto de un correo.

Casos de Prueba

AsuntoSalidaExplicación
RE: Meeting Tomorrow1Respondido una vez
FWD: RE: Fw: Project Update3Dos reenvíos, una respuesta
Project Update0No hay prefijos
fWd: rE: fW: Important Notice3Insensible a mayúsculas/minúsculas

🛠️ Desarrollo de la Solución

Enfoque

Utilizaremos una expresión regular para buscar los prefijos, aprovechando la insensibilidad a mayúsculas/minúsculas y la búsqueda global.

Código Comentado

function emailChainCount(subject) {
  // Buscar los prefijos FWD:, FW: o RE: sin importar mayúsculas/minúsculas
  const regex = /(FWD:|FW:|RE:)/gi
  // Coincidencias encontradas
  const matches = subject.match(regex)
  // Retornar el número de coincidencias, o 0 si no hay ninguna
  return matches ? matches.length : 0
}

📊 Análisis de Complejidad

  • Tiempo: O(n)O(n), donde nn es la longitud del string.
  • Espacio: O(k)O(k), donde kk es la cantidad de coincidencias (en la práctica, pequeño).

⚠️ Casos Edge y Consideraciones

  • Prefijos con espacios entre letras y dos puntos (ej: FW :) no cuentan.
  • Prefijos anidados o repetidos (RE: RE: RE:) se cuentan todos.
  • Prefijos en cualquier posición del asunto son válidos.
  • Prefijos incompletos o con otros caracteres (FW, RE-) no cuentan.
  • El conteo es insensible a mayúsculas/minúsculas.

💡 Reflexiones y Aprendizajes

  • Expresiones regulares para búsqueda de patrones.
  • Insensibilidad a mayúsculas/minúsculas con el flag i.
  • Métodos nativos de JavaScript para manipulación de strings.

📚 Recursos