Saltar al contenido principal

Dart: Invertir una cadena de texto o String

Youtube video player

Youtube video player

Este es un problema sencillo donde tenemos una cadena por ejemplo Hola mundo y debemos invertirla para que quede odnum aloH.

Hay 2 formas de resolver este problema y en ambas vamos a utilizar un for para iterar carácter por carácter empezando desde el último carácter. También en ambas soluciones utilizaremos la API de Runes para poder acceder a cada uno de los caracteres. Pero una de estas formas es más eficiente que la otra. Vamos a ver las soluciones:

Solución 1: Usando una variable String

Dado el texto Hola mundo vamos a crear una variable de tipo String llamada textoInvertido que nos va a ayudar a almacenar el texto invertido.

Después vamos a crear un ciclo para iterar carácter por carácter desde la última posición e iremos concatenando cada uno a la variable textoInvertido.

for (var i = texto.runes.length - 1; i >= 0; i--) {
textoInvertido += String.fromCharCode(
texto.runes.elementAt(i),
);
}
info

En Dart, si queremos acceder a los caracteres de un String tenemos que utilizar la API de Runes. Una "rune" es un número entero que representa un punto de código Unicode.

Al terminar el ciclo textoInvertido contiene el texto odnum aloH y lo podemos imprimir con la función print.

La desventaja de esta solución es que el tipo de dato String es inmutable, esto quiere decir que la variable String no puede cambiar, por lo que cada vez que concatenamos un carácter a textoInvertido este crea un nuevo objeto, en consecuencia utilizamos más memoria.

Puedes correr el código de la solución 1 en DartPad para ver los resultados:

Solución 2: Usando StringBuffer

Esta solución es muy similar a la solución anterior, pero ahora vamos a utilizar la clase StringBuffer, la ventaja de usar esta clase es que en cada iteración del ciclo no vamos a crear un objeto nuevo por lo que esta solución es más eficiente en cuanto al uso de memoria.

Dado el texto Hola mundo vamos a crear una variable de tipo StringBuffer llamada textoInvertido que nos va a ayudar a almacenar el texto invertido.

Después vamos a crear un ciclo para iterar carácter por carácter desde la última posición e iremos agregando cada uno a la variable textoInvertido con la función write.

for (var i = texto.runes.length - 1; i >= 0; i--) {
textoInvertido.write(
String.fromCharCode(texto.runes.elementAt(i)),
);
}

Al terminar el ciclo textoInvertido contiene el texto odnum aloH y lo podemos imprimir con la función print.

Puedes correr el código de la solución 2 en DartPad para ver los resultados:

Conclusión

Este es un problema sencillo que no debe tomar más de un par de minutos en resolver. Mi recomendación en una entrevista de trabajo es utilizar la solución 2 con StringBuffer porque es más eficiente.

Si sabes otra forma de resolver este problema que sea más eficiente puedes dejarla en los comentarios.