Codificación y decodificación de longitud de ejecución

Dada una string de entrada, escriba una función que devuelva la string codificada de longitud de ejecución para la string de entrada.
Por ejemplo, si la string de entrada es «wwwwaaadexxxxxx», la función debería devolver «w4a3d1e1x6»

Siga los pasos a continuación para resolver este problema:

  1. Elija el primer carácter de la string de origen. 
  2. Agregue el carácter elegido a la string de destino. 
  3. Cuente el número de apariciones posteriores del carácter seleccionado y agregue el recuento a la string de destino. 
  4. Elija el siguiente carácter y repita los pasos 2, 3 y 4 si NO llega al final de la string.

A continuación se muestra la implementación del enfoque anterior:

C++

// 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;
    }
}
//Driver code
int main()
{
    string str = "wwwwaaadexxxxxxywww";
    printRLE(str);
    return 0;
}

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[] = "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

<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>
Producción

w4a3d1e1x6y1w3

Complejidad temporal: O(n)
Espacio auxiliar: O(1)

Escriba comentarios si encuentra que el código/algoritmo anterior es incorrecto, o encuentre mejores formas de resolver el mismo problema.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *