Invertir una cadena
Pista 1
Convierte la cadena en array de caracteres; las cadenas en JavaScript son inmutables.
Pista 2
Dos punteros, uno en cada extremo, intercambiando y avanzando hacia el centro.
Escribe una función que invierta una cadena sin usar Array.prototype.reverse().
Ejemplos
invertir("atlas") → "salta"
invertir("hola") → "aloh"
invertir("a") → "a"
Extra: ¿qué pasa si la cadena contiene emojis como "mapa🗺️"? Pruébalo con tu solución.
Ver solución
El patrón de dos punteros: intercambiar extremos y avanzar hacia el centro.
function invertir(s: string): string {
const chars = [...s]; // el spread separa por code points, no por unidades UTF-16
let i = 0;
let j = chars.length - 1;
while (i < j) {
[chars[i], chars[j]] = [chars[j], chars[i]];
i++;
j--;
}
return chars.join('');
}
La trampa de los emojis: s.split('') corta por unidades UTF-16 y rompe caracteres fuera del plano básico (un emoji son 2 unidades: los llamados pares subrogados). [...s] itera por code points y los conserva. (Los emojis compuestos con ZWJ, como 👨👩👧, siguen rompiéndose — resolver eso requiere segmentación de grafemas con Intl.Segmenter.)
Complejidad: O(n) en tiempo, O(n) en espacio — en JavaScript no hay inversión in situ posible porque las cadenas son inmutables; en C o Rust con buffers mutables sería O(1) de espacio extra.