Dígitos cuyas representaciones alfabéticas están mezcladas en una string dada

Dada una string S de longitud N que es la representación en inglés de cualquier número de dígitos en el rango [0 – 9] en formato desordenado. La tarea es encontrar los dígitos de esta representación. 
Nota: Imprime los dígitos en cualquier orden

Ejemplos

Entrada: S = “owoftnuoer”
Salida: 124
Explicación: Los dígitos aquí son formas confusas de uno, dos y cuatro. Por lo tanto, la salida requerida puede ser 124 o 421 o 214, etc.

Entrada : S = “zesxrionezoreo”
Salida : 0016

Enfoque: este problema se puede resolver fácilmente al observar un hecho interesante: todos los dígitos pares tienen al menos un carácter que no está presente en ninguna otra string, mientras que todos los dígitos impares no:

Los siguientes dígitos tienen letras únicas:

  • cero: único dígito con z
  • dos: único dígito con w
  • cuatro: único dígito con u
  • seis: único dígito con x
  • ocho: único dígito con g

Para los dígitos impares, cada letra también aparece en algún otro dígito. Los dígitos impares en palabras son {uno, tres, cinco, siete, nueve}. Siga los pasos que se indican a continuación para resolver el problema.

  • Cree un vector de strings num que contendrá los números en letras inglesas del 0 al 9 y un vector de números enteros, count[] de tamaño 10 y también cree una string de respuesta ans para mostrar los números.
  • Ahora, recorre la string dada de i = 0 a N-1 .
  • Si s[i] = ‘z’ , aumente count[0] en 1 .
  • Si s[i] = ‘w’ , aumente count[2] en 1 .
  • Si s[i] = ‘g’ , aumente count[8] en 1 .
  • Si s[i] = ‘x’ , aumente count[6] en 1 .
  • Si s[i] = ‘v’ , aumente count[5] en 1 .
  • Si s[i] = ‘o’ , aumente count[1] en 1 .
  • Si s[i] = ‘s’ , aumente count[7] en 1 .
  • Si s[i] = ‘f’ , aumente count[4] en 1 .
  • Si s[i] = ‘h’ , aumente count[3] en 1 .
  • Si s[i] = ‘i’ , aumente count[9] en 1 .
  • Ahora, actualice los elementos del vector como se muestra a continuación:
  • cuenta[7] = cuenta[7] – cuenta[6] .
  • cuenta[5] = cuenta[5] – cuenta[7] .
  • cuenta[4] = cuenta[4] – cuenta[5] .
  • cuenta[1] = cuenta[1] – (cuenta[2] + cuenta[4] + cuenta[0]) .
  • cuenta[3] = cuenta[3] – cuenta[8] .
  • cuenta[9] = cuenta[9] – (cuenta[5] + cuenta[6] + cuenta[8]) .
  • Ahora, recorra el vector de 0 a 9 y agregue el carácter (i + ‘0’) a ans , cuente [i] veces.
  • Finalmente, escriba ans como la respuesta requerida.

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

C++

// C++ program for the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert the jumbled
// string into digits
string finddigits(string s)
{
 
    // Strings of digits 0-9
    string num[]
        = { "zero", "one", "two",
            "three", "four", "five",
            "six", "seven", "eight", "nine" };
 
    // Initialize vector
    vector<int> arr(10);
 
    // Initialize answer
    string ans = "";
 
    // Size of the string
    int n = s.size();
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
        if (s[i] == 'z')
            arr[0]++;
        if (s[i] == 'w')
            arr[2]++;
        if (s[i] == 'g')
            arr[8]++;
        if (s[i] == 'x')
            arr[6]++;
        if (s[i] == 'v')
            arr[5]++;
        if (s[i] == 'o')
            arr[1]++;
        if (s[i] == 's')
            arr[7]++;
        if (s[i] == 'f')
            arr[4]++;
        if (s[i] == 'h')
            arr[3]++;
        if (s[i] == 'i')
            arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < arr[i]; j++) {
            ans += (char)(i + '0');
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
int main()
{
    string s = "owoftnuoer";
    cout << finddigits(s) << endl;
}

Java

// Java program for the above approach
import java.io.*;
class GFG {
 
  // Function to convert the jumbled
  // string into digits
  static String finddigits(String s)
  {
 
    // Strings of digits 0-9
    String[] num
      = { "zero", "one", "two",   "three", "four",
         "five", "six", "seven", "eight", "nine" };
 
    // Initialize vector
    int[] arr = new int[10];
 
    // Initialize answer
    String ans = "";
 
    // Size of the string
    int n = s.length();
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
      if (s.charAt(i) == 'z')
        arr[0]++;
      if (s.charAt(i) == 'w')
        arr[2]++;
      if (s.charAt(i) == 'g')
        arr[8]++;
      if (s.charAt(i) == 'x')
        arr[6]++;
      if (s.charAt(i) == 'v')
        arr[5]++;
      if (s.charAt(i) == 'o')
        arr[1]++;
      if (s.charAt(i) == 's')
        arr[7]++;
      if (s.charAt(i) == 'f')
        arr[4]++;
      if (s.charAt(i) == 'h')
        arr[3]++;
      if (s.charAt(i) == 'i')
        arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < arr[i]; j++) {
        ans += (char)(i + '0');
      }
    }
 
    // Return answer
    return ans;
  }
 
  // Driver Code
  public static void main(String[] args)
  {
    String s = "owoftnuoer";
    System.out.println(finddigits(s));
  }
}
 
// This code is contributed by Dharanendra L V

Python3

# Python3 program for the above approach
 
# Function to convert the jumbled
# into digits
def finddigits(s):
     
    # Strings of digits 0-9
    num = [ "zero", "one", "two", "three",
            "four", "five", "six", "seven",
            "eight", "nine"]
 
    # Initialize vector
    arr = [0] * (10)
 
    # Initialize answer
    ans = ""
 
    # Size of the string
    n = len(s)
 
    # Traverse the string
    for i in range(n):
        if (s[i] == 'z'):
            arr[0] += 1
        if (s[i] == 'w'):
            arr[2] += 1
        if (s[i] == 'g'):
            arr[8] += 1
        if (s[i] == 'x'):
            arr[6] += 1
        if (s[i] == 'v'):
            arr[5] += 1
        if (s[i] == 'o'):
            arr[1] += 1
        if (s[i] == 's'):
            arr[7] += 1
        if (s[i] == 'f'):
            arr[4] += 1
        if (s[i] == 'h'):
            arr[3] += 1
        if (s[i] == 'i'):
            arr[9] += 1
             
    # Update the elements of the vector
    arr[7] -= arr[6]
    arr[5] -= arr[7]
    arr[4] -= arr[5]
    arr[1] -= (arr[2] + arr[4] + arr[0])
    arr[3] -= arr[8]
    arr[9] -= (arr[5] + arr[6] + arr[8])
 
    # Print the digits into their
    # original format
    for i in range(10):
        for j in range(arr[i]):
            ans += chr((i) + ord('0'))
 
    # Return answer
    return ans
 
# Driver Code
if __name__ == '__main__':
     
    s = "owoftnuoer"
     
    print(finddigits(s))
 
# This code is contributed by mohit kumar 29

C#

// C# program for the above approach
using System;
public class GFG
{
 
  // Function to convert the jumbled
  // string into digits
  static string finddigits(string s)
  {
 
    // Initialize vector
    int[] arr = new int[10];
 
    // Initialize answer
    string ans = "";
 
    // Size of the string
    int n = s.Length;
 
    // Traverse the string
    for (int i = 0; i < n; i++) {
      if (s[i] == 'z')
        arr[0]++;
      if (s[i] == 'w')
        arr[2]++;
      if (s[i] == 'g')
        arr[8]++;
      if (s[i] == 'x')
        arr[6]++;
      if (s[i] == 'v')
        arr[5]++;
      if (s[i] == 'o')
        arr[1]++;
      if (s[i] == 's')
        arr[7]++;
      if (s[i] == 'f')
        arr[4]++;
      if (s[i] == 'h')
        arr[3]++;
      if (s[i] == 'i')
        arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
    for (int i = 0; i < 10; i++) {
      for (int j = 0; j < arr[i]; j++) {
        ans += (char)(i + '0');
      }
    }
 
    // Return answer
    return ans;
  }
 
  // Driver Code
  static public void Main()
  {
    string s = "owoftnuoer";
    Console.WriteLine(finddigits(s));
  }
}
 
// This code is contributed by Dharanendra L V

Javascript

<script>
 
// JavaScript program for the above approach
 
// Function to convert the jumbled
// string into digits
function finddigits(s)
{
 
    // Strings of digits 0-9
    let num = [ "zero", "one", "two",
            "three", "four", "five",
            "six", "seven", "eight", "nine" ];
 
    // Initialize vector
    let arr = new Array(10).fill(0);
 
    // Initialize answer
    let ans = "";
 
    // Size of the string
    let n = s.length;
 
    // Traverse the string
    for (let i = 0; i < n; i++) {
        if (s[i] == 'z')
            arr[0]++;
        if (s[i] == 'w')
            arr[2]++;
        if (s[i] == 'g')
            arr[8]++;
        if (s[i] == 'x')
            arr[6]++;
        if (s[i] == 'v')
            arr[5]++;
        if (s[i] == 'o')
            arr[1]++;
        if (s[i] == 's')
            arr[7]++;
        if (s[i] == 'f')
            arr[4]++;
        if (s[i] == 'h')
            arr[3]++;
        if (s[i] == 'i')
            arr[9]++;
    }
 
    // Update the elements of the vector
    arr[7] -= arr[6];
    arr[5] -= arr[7];
    arr[4] -= arr[5];
    arr[1] -= (arr[2] + arr[4] + arr[0]);
    arr[3] -= arr[8];
    arr[9] -= (arr[5] + arr[6] + arr[8]);
 
    // Print the digits into their
    // original format
 
    for (let i = 0; i < 10; i++) {
        for (let j = 0; j < arr[i]; j++) {
            ans += i;
        }
    }
 
    // Return answer
    return ans;
}
 
// Driver Code
 
let s = "owoftnuoer";
document.write(finddigits(s),"</br>");
 
// this code is contributed by shinjanpatra.
</script>
Producción: 

124

 

Complejidad de tiempo: O(N) donde N es la longitud de la string
Espacio auxiliar: O(N)

Publicación traducida automáticamente

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