Oración Invertida - FreeCodeCamp #32 Daily Challenge
Reverse Sentence — Análisis y Explicación 🚀
Enunciado del Problema
Dado un string de palabras, devuelve un nuevo string con las palabras en orden inverso. Por ejemplo, la primera palabra debe estar al final y la última al principio.
Condiciones:
- Las palabras pueden estar separadas por uno o más espacios.
- La cadena retornada debe tener solo un espacio entre cada palabra.
Análisis Inicial
¿Qué pide el reto?
Invertir el orden de las palabras y normalizar los espacios. Es decir:
- Separar correctamente las palabras (ignorando espacios extra).
- Reordenar e imprimirlas en orden inverso, separadas por un solo espacio.
Para esto, los métodos split, reverse y join de JavaScript son ideales.
Casos de Prueba Clave
- Entrada:
"world hello"→ Salida:"hello world" - Entrada:
"push commit git"→ Salida:"git commit push" - Entrada:
"npm install sudo"→ Salida:"sudo install npm" - Entrada:
"import default function export"→ Salida:"export function default import"
Todos los casos normalizan los espacios y revierten el orden de las palabras.
Desarrollo de la Solución
Estrategia
- Dividir usando
.split(/\s+/)para obtener solo palabras. - Invertir el arreglo.
- Unir con
.join(' ')para asegurar un solo espacio.
Implementación en JavaScript
function reverseSentence(sentence) {
return sentence
.trim() // Elimina espacios al inicio y al final
.split(/\s+/) // Divide en palabras, ignora espacios extra
.reverse() // Invierte el arreglo
.join(' ') // Une con un solo espacio
}Análisis de Complejidad
Temporal
Cada operación (trim, split, reverse, join) recorre la cadena o el arreglo una vez:
Espacial
Se crean arreglos auxiliares proporcionales al tamaño de la entrada:
Casos Edge y Consideraciones
- Cadena vacía o solo espacios: retorna "" (vacío).
- Espacios al inicio/final: se eliminan.
- Múltiples espacios entre palabras: normalizados a uno solo.
- Una sola palabra: retorna igual, sin espacios extra.
Reflexiones y Aprendizajes
🔹 Strings y arreglos: manipulación eficiente en JS. 🔹 Expresiones regulares: robustez ante entradas “sucias”. 🔹 Composición funcional: código legible y compacto.
💡 La solución es óptima y legible. No requiere optimizaciones adicionales.