Dart: Invertir una cadena de texto o String
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),
);
}
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.