Verifique si String S se puede comprimir a T reemplazando algunos caracteres X con el conteo X

Dadas dos strings, S y T , donde S es una string normal y T es  una string comprimida, la tarea es determinar si la string comprimida T se puede lograr comprimiendo la string S.

Nota: Un mecanismo de compresión puede eliminar arbitrariamente X (X >= 0) caracteres y reemplazarlos con el recuento de caracteres eliminados (X). 

Ejemplos:

Entrada: S = “HELLOWORLD” T=”H2L4L1″
Salida: Verdadero
Explicación: 
Reemplace los índices 1 a 2 en “H EL LOWORLD” con el conteo 2 -> “H 2 LOWORLD”
Reemplace los índices 4 a 7 en “HELL OWOR LD” con conteo 4 -> “H2L 4 LD”
Reemplace el índice 9 en “HELLOWORL D ” con el conteo 1 -> “H2L4L 1
La string resultante es la misma que T. Por lo tanto, la string S se puede comprimir a T.

Entrada: S = «DFS» T = «D1D»
Salida: Falso
Explicación: podemos ver claramente que T no es una string comprimida válida para S, ya que la string comprimida T termina en «D», que no es similar a la string anterior S .

 

Enfoque: la idea es simplemente atravesar la string y hacer coincidir los caracteres de la siguiente manera:

  • Compare los caracteres en los índices correspondientes en S y T,
  • Del mismo modo, omita el recuento de índices entre dos alfabetos en T.

Ilustración:

Considere S = «HELLOWORLD» T = «H2L4L1»

En una string comprimida, 2 es el número entero entre ‘H’ y ‘L’, por lo que la string S debe tener dos caracteres entre ‘H’ y ‘L’, y tiene (H EL LOWORLD ) .

Luego, el siguiente número entero es 4 entre ‘L’ y ‘L’, luego verifique si String S tiene 4 caracteres o no, (HELL OWOR LD)

Y el último entero es 1 después del carácter ‘L’ y String también tiene 1 carácter (es decir, ‘D’) después de ‘L’. (HOLA MUNDO D )

Entonces, esta string comprimida es válida. 

S = “ H EL BAJO LOWOR L D ” T=”H 2 L 4 L 1

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

  • Comience a atravesar la cuerda S y T hasta su longitud simultáneamente.
  • Verifique si T[i] es un número o no, si no es un número, compare S[j] y T[i] si no son iguales, luego devuelva directamente 0; de lo contrario, continúe e incremente j en 1.
  • Si T[i] es un número, aumente la j a ese número hasta que obtengamos números en la string T.
  • Incremente i en 1 hasta la longitud de T.
  • Si j no es igual a S de longitud, devuelve 0.
  • Si se cumplen todas las condiciones, devuelve 1 por fin.

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

C++

// C++ code for the above approach:
 
#include <bits/stdc++.h>
using namespace std;
 
// Return 1 if char c is number
boolean isnum(char c) { return (c >= 48 && c <= 57); }
 
// Function to check
// If string is compressed or not
int checkCompressed(string S, string T)
{
    int i = 0, j = 0;
 
    // Iterate till S.length()
    // And T.length
    while (j < S.length() && i < T.length()) {
        if (isnum(T[i]) == false) {
 
            // If its not equal
            // Then return 0
            if (S[j] != T[i]) {
                return 0;
            }
            j++;
        }
        else {
            int ans = T[i] - 48;
 
            // Iterate till we get number
            // In T string
            while (isnum(T[++i])) {
                ans *= 10;
                ans += T[i] - 48;
            }
            j += ans;
            i--;
        }
        i++;
    }
 
    // It j not equal to S string length
    // Then return 0
    if (j != S.length()) {
        return 0;
    }
    return 1;
}
 
// Driver code
int main()
{
    string S = "HelloWorld";
    string T = "H2l4l1";
    cout << checkCompressed(S, T) << endl;
    return 0;
}

Java

// Java code for the above approach:
import java.util.*;
 
class GFG{
 
// Return 1 if char c is number
static boolean isnum(char c) { return (c >= 48 && c <= 57); }
 
// Function to check
// If String is compressed or not
static int checkCompressed(char[] S, char[] T)
{
    int i = 0, j = 0;
 
    // Iterate till S.length()
    // And T.length
    while (j < S.length && i < T.length) {
        if (isnum(T[i]) == false) {
 
            // If its not equal
            // Then return 0
            if (S[j] != T[i]) {
                return 0;
            }
            j++;
        }
        else {
            int ans = T[i] - 48;
 
            // Iterate till we get number
            // In T String
            while (i<T.length-1 && isnum(T[++i])) {
                 
                ans *= 10;
                ans += T[i] - 48;
            }
            j += ans;
            i--;
        }
        i++;
    }
 
    // It j not equal to S String length
    // Then return 0
    if (j != S.length) {
        return 0;
    }
    return 1;
}
 
// Driver code
public static void main(String[] args)
{
    String S = "HelloWorld";
    String T = "H2l4l1";
    System.out.print(checkCompressed(S.toCharArray(), T.toCharArray()) +"\n");
}
}
 
// This code is contributed by 29AjayKumar

Python3

# python3 code for the above approach:
 
# Return 1 if char c is number
def isnum(c):
    return ord(c) >= 48 and ord(c) <= 57
 
# Function to check
# If string is compressed or not
def checkCompressed(S, T):
 
    i, j = 0, 0
 
    # Iterate till S.length()
    # And T.length
    while (j < len(S) and i < len(T)):
        if (isnum(T[i]) == False):
 
                        # If its not equal
                        # Then return 0
            if (S[j] != T[i]):
                return 0
 
            j += 1
 
        else:
            ans = ord(T[i]) - 48
 
            # Iterate till we get number
            # In T string
            i += 1
            while (i < len(T) and isnum(T[i])):
                ans *= 10
                ans += T[i] - 48
                i += 1
 
            j += ans
            i -= 1
 
        i += 1
 
        # It j not equal to S string length
        # Then return 0
    if (j != len(S)):
        return 0
 
    return 1
 
# Driver code
if __name__ == "__main__":
 
    S = "HelloWorld"
    T = "H2l4l1"
    print(checkCompressed(S, T))
 
    # This code is contributed by rakeshsahni

C#

// C# code for the above approach:
using System;
 
public class GFG{
 
  // Return 1 if char c is number
  static boolean isnum(char c) { return (c >= 48 && c <= 57); }
 
  // Function to check
  // If String is compressed or not
  static int checkCompressed(char[] S, char[] T)
  {
    int i = 0, j = 0;
 
    // Iterate till S.length()
    // And T.length
    while (j < S.Length && i < T.Length) {
      if (isnum(T[i]) == false) {
 
        // If its not equal
        // Then return 0
        if (S[j] != T[i]) {
          return 0;
        }
        j++;
      }
      else {
        int ans = T[i] - 48;
 
        // Iterate till we get number
        // In T String
        while (i<T.Length-1 && isnum(T[++i])) {
 
          ans *= 10;
          ans += T[i] - 48;
        }
        j += ans;
        i--;
      }
      i++;
    }
 
    // It j not equal to S String length
    // Then return 0
    if (j != S.Length) {
      return 0;
    }
    return 1;
  }
 
  // Driver code
  static public void Main ()
  {
    string S = "HelloWorld";
    string T = "H2l4l1";
    Console.Write(checkCompressed(S.ToCharArray(), T.ToCharArray()) );
  }
}
 
// This code is contributed by hrithikgarg03188.

Javascript

<script>
    // JavaScript Program of the above approach.
 
// Return 1 if char c is number
function isnum(c) { return (c>= 48 && c <= 57); }
  
// Function to check
// If string is compressed or not
function checkCompressed(S, T)
{
    let i = 0, j = 0;
  
    // Iterate till S.length()
    // And T.length
    while (j < S.length && i < T.length) {
        if (isnum(T[i].charCodeAt()) == false) {
  
            // If its not equal
            // Then return 0
            if (S[j] != T[i]) {
                return 0;
            }
            j++;
        }
        else {
            let ans = T[i].charCodeAt() - 48;
  
            // Iterate till we get number
            // In T string
            while (isnum(T[++i])) {
                ans *= 10;
                ans += T[i].charCodeAt() - 48;
            }
            j += ans;
            i--;
        }
        i++;
    }
  
    // It j not equal to S string length
    // Then return 0
    if (j != S.length) {
        return 0;
    }
    return 1;
}
 
    // Driver Code
    let S = "HelloWorld";
    let T = "H2l4l1";
    document.write( checkCompressed(S, T));
 
// This code is contributed by code_hunt.
</script>
Producción

1

Complejidad de tiempo: O(max (|S|, |T|) )
Espacio auxiliar: O(1)

Publicación traducida automáticamente

Artículo escrito por vikramramwani2 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 *