Run Length Encoding - GeeksforGeeks

15 Feb, 2022
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”
a) Pick the first character from the source string. b) Append the picked character to the destination string. c) Count the number of subsequent occurrences of the picked character and append the count to the destination string. d) Pick the next character and repeat steps b) c) and d) if the end of the string is NOT reached. 
C++
Python3
C#
Javascript
// CPP program to implement run length encoding#include <bits/stdc++.h>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;    }} int main(){    string str = "wwwwaaadexxxxxxywww";    printRLE(str);    return 0;}
# Python3 program to implement# run length encodingdef 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 codeif __name__ == "__main__":     st = "wwwwaaadexxxxxxywww"    printRLE(st) # This code is contributed by Chitranayal
// C# program to implement run length encodingusing 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
<script>// Javascript program to implement run length encoding    function printRLE(str)    {        let n = str.length;        for (let i = 0; i < n; i++)        {            // Count occurrences of current character            let count = 1;            while (i < n - 1 && str[i] == str[i+1])            {                count++;                i++;            }                         // Print character and its count            document.write(str[i]);            document.write(count);        }    }         let str = "wwwwaaadexxxxxxywww";    printRLE(str);         // This code is contributed by rag2127</script>
w4a3d1e1x6y1w3
 
C Implementation  
C
#include <stdio.h>#include <stdlib.h>#include <string.h>#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[] = "geeksforgeeks";    char* res = encode(str);    printf("%s", res);    getchar();}
g1e2k1s1f1o1r1g1e2k1s1
 
Time Complexity: O(n)References: http://en.wikipedia.org/wiki/Run-length_encodingPlease write comments if you find the above code/algorithm incorrect, or find better ways to solve the same problem. 
shivanisinghss2110
ukasp
rag2127
devsoni
kushsharma1001
techieshabbir
Amazon
CouponDunia
FactSet
Microsoft
String-Run Length Encoding
VMWare
Strings
VMWare
Amazon
Microsoft
FactSet
CouponDunia
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Different methods to reverse a string in C/C++
Python program to check if a string is palindrome or not
Check for Balanced Brackets in an expression (well-formedness) using Stack
KMP Algorithm for Pattern Searching
Convert string to char array in C++
Longest Palindromic Substring | Set 1
Caesar Cipher in Cryptography
Array of Strings in C++ (5 Different Ways to Create)
Reverse words in a given string
Top 50 String Coding Problems for Interviews