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 caracter por caracter 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
Dado el texto Hola mundo vamos a crear una variable de tipo String
llamada textoInvertido
que nos va ayudar a almacenar el texto invertido.
Después vamos a crear un ciclo para iterar caracter por caracter desde la última posición e iremos concatenando cada uno a la variable textoInvertido
.
for (var i = texto.length - 1; i >= 0; i--) {
textoInvertido += 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
.
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
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 ayudar a almacenar el texto invertido.
Después vamos a crear un ciclo para iterar caracter por caracter desde la última posición e iremos agregando cada uno a la variable textoInvertido
con la función write
.
for (var i = texto.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.
Videotutorial en YouTube
Recuerda que también puedes ver el videotutorial de este curso en youtube: