 GeeksforGeeks App
Open App Browser
Continue

# Run Length Encoding and Decoding

Given an input string, write a function that returns the Run Length Encoded string for the input string.
For example, if the input string is “wwwwaaadexxxxxx”, then the function should return “w4a3d1e1x6”

Recommended Practice

Follow the steps below to solve this problem:

1. Pick the first character from the source string.
2. Append the picked character to the destination string.
3. Count the number of subsequent occurrences of the picked character and append the count to the destination string.
4. Pick the next character and repeat steps 2, 3 and 4 if the end of the string is NOT reached.

Below is the implementation of the above approach:

## C++

 `// CPP program to implement run length encoding``#include ``using` `namespace` `std;` `void` `printRLE(string str)``{``    ``int` `n = str.length();``    ``for` `(``int` `i = 0; i < n; i++) {` `        ``// Count occurrences of current character``        ``int` `count = 1;``        ``while` `(i < n - 1 && str[i] == str[i + 1]) {``            ``count++;``            ``i++;``        ``}``        ``// Print character and its count``        ``cout << str[i] << count;``    ``}``}``//Driver code``int` `main()``{``    ``string str = ``"wwwwaaadexxxxxxywww"``;``    ``printRLE(str);``    ``return` `0;``}`

## C

 `#include ``#include ``#include ``#define MAX_RLEN 50` `/* Returns the Run Length Encoded string for the``   ``source string src */``char``* encode(``char``* src)``{``    ``int` `rLen;``    ``char` `count[MAX_RLEN];``    ``int` `len = ``strlen``(src);` `    ``/* If all characters in the source string are different,``    ``then size of destination string would be twice of input string.``    ``For example if the src is "abcd", then dest would be "a1b1c1d1"``    ``For other inputs, size would be less than twice.  */``    ``char``* dest = (``char``*)``malloc``(``sizeof``(``char``) * (len * 2 + 1));` `    ``int` `i, j = 0, k;` `    ``/* traverse the input string one by one */``    ``for` `(i = 0; i < len; i++) {` `        ``/* Copy the first occurrence of the new character */``        ``dest[j++] = src[i];` `        ``/* Count the number of occurrences of the new character */``        ``rLen = 1;``        ``while` `(i + 1 < len && src[i] == src[i + 1]) {``            ``rLen++;``            ``i++;``        ``}` `        ``/* Store rLen in a character array count[] */``        ``sprintf``(count, ``"%d"``, rLen);` `        ``/* Copy the count[] to destination */``        ``for` `(k = 0; *(count + k); k++, j++) {``            ``dest[j] = count[k];``        ``}``    ``}` `    ``/*terminate the destination string */``    ``dest[j] = ``'\0'``;``    ``return` `dest;``}` `/*driver program to test above function */``int` `main()``{``    ``char` `str[] = ``"wwwwaaadexxxxxxywww"``;``    ``char``* res = encode(str);``    ``printf``(``"%s"``, res);``    ``getchar``();``}`

## Java

 `/*package whatever //do not write package name here */` `import` `java.io.*;``public` `class` `GFG {` `    ``public` `static` `void` `encoding(String str)``    ``{``        ``int` `n = str.length();``        ``for` `(``int` `i = ``0``; i < n; i++) {` `            ``// Count occurrences of current character``            ``int` `count = ``1``;``            ``while` `(i < n - ``1``                   ``&& str.charAt(i) == str.charAt(i + ``1``)) {``                ``count++;``                ``i++;``            ``}` `            ``// Print character and its count``            ``System.out.print(str.charAt(i) + ``""` `+ count);``        ``}``    ``}` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{` `        ``String str = ``"wwwwaaadexxxxxxywww"``;``        ``encoding(str);``    ``}``}`

## Python3

 `# Python3 program to implement``# run length encoding``def` `printRLE(st):` `    ``n ``=` `len``(st)``    ``i ``=` `0``    ``while` `i < n``-` `1``:` `        ``# Count occurrences of``        ``# current character``        ``count ``=` `1``        ``while` `(i < n ``-` `1` `and``               ``st[i] ``=``=` `st[i ``+` `1``]):``            ``count ``+``=` `1``            ``i ``+``=` `1``        ``i ``+``=` `1` `        ``# Print character and its count``        ``print``(st[i ``-` `1``] ``+``              ``str``(count),``              ``end ``=` `"")` `# Driver code``if` `__name__ ``=``=` `"__main__"``:` `    ``st ``=` `"wwwwaaadexxxxxxywww"``    ``printRLE(st)` `# This code is contributed by Chitranayal`

## C#

 `// C# program to implement run length encoding``using` `System;``class` `GFG``{``public` `class` `RunLength_Encoding``{``    ``public` `static` `void` `printRLE(String str)``    ``{``        ``int` `n = str.Length;``        ``for` `(``int` `i = 0; i < n; i++)``        ``{` `            ``// Count occurrences of current character``            ``int` `count = 1;``            ``while` `(i < n - 1 && str[i] == str[i + 1])``            ``{``                ``count++;``                ``i++;``            ``}` `            ``// Print character and its count``            ``Console.Write(str[i]);``            ``Console.Write(count);``        ``}``    ``}` `    ``public` `static` `void` `Main(String[] args)``    ``{``        ``String str = ``"wwwwaaadexxxxxxywww"``;``        ``printRLE(str);``    ``}``}``}` `// This code is contributed by shivanisinghss2110`

## Javascript

 ``

Output

`w4a3d1e1x6y1w3`

Time Complexity: O(n)
Auxiliary Space: O(1)

Please write comments if you find the above code/algorithm incorrect, or find better ways to solve the same problem.

My Personal Notes arrow_drop_up