jueves, 24 de junio de 2021

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.

Recuerda que también puedes ver el videotutorial de este curso en youtube:

    

0 comments:

Publicar un comentario

Entradas populares