La codificación de longitud de ejecución (RLE) es una forma simple de compresión de datos sin pérdidas que se ejecuta en secuencias con el mismo valor que ocurre muchas veces consecutivas. Codifica la secuencia para almacenar un solo valor y su recuento.

Por ejemplo, considere una pantalla que contenga texto negro sin formato sobre un fondo blanco sólido. Habrá muchas tiradas largas de píxeles blancos en el espacio en blanco y muchas tiradas cortas de píxeles negros dentro del texto.

WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW

Con un algoritmo de compresión de datos de codificación de longitud de ejecución (RLE) aplicado a la línea de exploración hipotética anterior, se puede representar como 12W1B12W3B24W1B14W. Esto puede interpretarse como una secuencia de doce W’s, una B, doce W’s, Tres B’s, etc.
 

Practice this problem

 
La idea es ejecutar un escaneo lineal en la string y, para cada carácter distinto, agregar el carácter y su aparición consecutiva en la string de salida.

El algoritmo se puede implementar de la siguiente manera en C++, Java y Python. Tenga en cuenta que el tamaño de salida duplicará el tamaño de entrada en el peor de los casos, por lo que el algoritmo no puede ejecutarse en su lugar. p.ej ABCD —> A1B1C1D1.

C++


Descargar  Ejecutar código

Resultado:

1A2B3C1D

Java


Descargar  Ejecutar código

Resultado:

1A2B3C1D

Python


Descargar  Ejecutar código

Resultado:

1A2B3C1D

La complejidad temporal de la solución anterior es O(n), dónde n es la longitud de la string de entrada y no requiere ningún espacio adicional.

 
Referencias: Codificación de longitud de ejecución - Wikipedia