Mayusculízalo - FreeCodeCamp #126 Daily Challenge
Enunciado
Dado un string que representa un título, devuelve un nuevo string en “title case” siguiendo estas reglas:
- La primera letra de cada palabra en mayúscula.
- El resto de las letras en minúscula.
- Las palabras separadas por un solo espacio.
Análisis Inicial
El objetivo es transformar cualquier string recibido para que cada palabra comience con mayúscula y el resto de las letras sean minúsculas, sin importar el formato original. Las palabras deben estar separadas por un solo espacio.
Casos de Prueba
Algunos casos relevantes:
- titleCase(“hello world”) → “Hello World”
- titleCase(“the quick brown fox”) → “The Quick Brown Fox”
- titleCase(“JAVASCRIPT AND PYTHON”) → “Javascript And Python”
- titleCase(“AvOcAdO tOAst fOr brEAkfAst”) → “Avocado Toast For Breakfast”
- titleCase("") → ""
- titleCase(“a”) → “A”
- titleCase(“A”) → “A”
- titleCase(“multiple spaces”) → “Multiple Spaces”
- titleCase(” leading and trailing ”) → “Leading And Trailing”
Desarrollo de la Solución
Enfoque
La clave es transformar el string a minúsculas, dividirlo en palabras, capitalizar la primera letra de cada una y unirlas con un solo espacio.
Implementación paso a paso
- Convertir todo el string a minúsculas.
- Dividir en palabras.
- Capitalizar la primera letra de cada palabra.
- Unir con espacios.
function titleCase(title) {
return title
.toLowerCase()
.split(' ')
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
}Análisis de Complejidad
Complejidad Temporal
La función recorre el string para minúsculas, luego para dividir y luego para mapear, todo en donde es la longitud del string.
Complejidad Espacial
Se crean arrays y strings intermedios, por lo que también es .
Casos Edge y Consideraciones
- String vacío → retorna "".
- Espacios múltiples → split(” ”) genera palabras vacías, pero el resultado sigue el formato esperado.
- Espacios al inicio o final → se generan palabras vacías, pero el resultado es correcto.
- Palabra de un solo carácter → se capitaliza bien.
Reflexiones y Aprendizajes
Conceptos Aplicados
- Métodos de string: toLowerCase, split, map, charAt, slice, join.
- Funciones de orden superior (map).
- Composición de funciones para transformar paso a paso.
Optimizaciones
Para evitar palabras vacías por espacios múltiples, se puede usar una expresión regular y filter:
function titleCase(title) {
return title
.toLowerCase()
.split(/\s+/)
.filter(Boolean)
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
}También se puede usar trim() para eliminar espacios al inicio y al final:
function titleCase(title) {
return title
.trim()
.toLowerCase()
.split(/\s+/)
.map(word => word.charAt(0).toUpperCase() + word.slice(1))
.join(' ')
}Recursos
- String.prototype.toLowerCase() - MDN
- String.prototype.split() - MDN
- Array.prototype.map() - MDN
- String.prototype.charAt() - MDN
- String.prototype.slice() - MDN
- String.prototype.join() - MDN
¿Te resultó útil? ¿Qué otros desafíos te gustaría ver resueltos? 🚀