Expande la string de acuerdo con las condiciones dadas.

Dada la string str del tipo “3(ab)4(cd)” , la tarea es expandirla a “abababcdcdcdcd”, donde los números enteros son del rango [1, 9] .
Este problema se planteó en una entrevista de ThoughtWorks realizada en octubre de 2018.

Ejemplos: 

Entrada: str = “3(ab)4(cd)” 
Salida: abababcdcdcdcd
Entrada: str = “2(kl)3(ap)” 
Salida: klklapapap 

Enfoque: Atravesamos la string y esperamos un valor numérico, num , para aparecer en la posición i . Tan pronto como llega, buscamos en i + 1 un ‘(‘ . Si está presente, el programa entra en un ciclo para extraer lo que esté dentro de ‘(‘ y ‘)’ y concatenarlo en una string vacía, temp . Más tarde, otro ciclo imprime la string generada num número de veces.Repita estos pasos hasta que la string termine.

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

C++

// C++ implementation of the approach
#include<bits/stdc++.h>
using namespace std;
 
// Function to expand and print the given string
void expandString(string strin)
{
    string temp = "";
    int j;
 
    for (int i = 0; i < strin.length(); i++)
    {
        if (strin[i] >= 0)
        {
 
            // Subtract '0' to convert char to int
            int num = strin[i] - '0';
            if (strin[i + 1] == '(')
            {
 
                // Characters within brackets
                for (j = i + 1; strin[j] != ')'; j++)
                {
                    if ((strin[j] >= 'a' && strin[j] <= 'z') ||
                        (strin[j] >= 'A' && strin[j] <= 'Z'))
                    {
                        temp += strin[j];
                    }
                }
 
                // Expanding
                for (int k = 1; k <= num; k++)
                {
                    cout << (temp);
                }
 
                // Reset the variables
                num = 0;
                temp = "";
 
                if (j < strin.length())
                {
                    i = j;
                }
            }
        }
    }
}
 
// Driver code
int main()
{
    string strin = "3(ab)4(cd)";
    expandString(strin);
}
 
// This code is contributed by Surendra_Gangwar

Java

// Java implementation of the approach
public class GFG {
 
    // Function to expand and print the given string
    static void expandString(String strin)
    {
        String temp = "";
        int j;
 
        for (int i = 0; i < strin.length(); i++) {
            if (strin.charAt(i) >= 0) {
 
                // Subtract '0' to convert char to int
                int num = strin.charAt(i) - '0';
                if (strin.charAt(i + 1) == '(') {
 
                    // Characters within brackets
                    for (j = i + 1; strin.charAt(j) != ')'; j++) {
                        if ((strin.charAt(j) >= 'a'
                             && strin.charAt(j) <= 'z')
                            || (strin.charAt(j) >= 'A'
                                && strin.charAt(j) <= 'Z')) {
                            temp += strin.charAt(j);
                        }
                    }
 
                    // Expanding
                    for (int k = 1; k <= num; k++) {
                        System.out.print(temp);
                    }
 
                    // Reset the variables
                    num = 0;
                    temp = "";
 
                    if (j < strin.length()) {
                        i = j;
                    }
                }
            }
        }
    }
 
    // Driver code
    public static void main(String args[])
    {
        String strin = "3(ab)4(cd)";
        expandString(strin);
    }
}

Python3

# Python3 implementation of the approach
 
# Function to expand and print the given string
def expandString(strin):
     
    temp = ""
    j = 0
    i = 0
    while(i < len(strin)):
        if (strin[i] >= "0"):
             
            # Subtract '0' to convert char to int
            num = ord(strin[i])-ord("0")
            if (strin[i + 1] == '('):
                 
                # Characters within brackets
                j = i + 1
                while(strin[j] != ')'):
                    if ((strin[j] >= 'a' and strin[j] <= 'z') or \
                        (strin[j] >= 'A' and strin[j] <= 'Z')):
                        temp += strin[j]
                    j += 1
                     
                # Expanding
                for k in range(1, num + 1):
                    print(temp,end="")
                     
                # Reset the variables
                num = 0
                temp = ""
                if (j < len(strin)):
                    i = j
        i += 1
 
# Driver code
strin = "3(ab)4(cd)"
expandString(strin)
 
# This code is contributed by shubhamsingh10

C#

// C# implementation of
// the above approach
using System;
class GFG{
 
// Function to expand and
// print the given string
static void expandString(string strin)
{
  string temp = "";
  int j;
 
  for (int i = 0;
           i < strin.Length; i++)
  {
    if (strin[i] >= 0)
    {
      // Subtract '0' to
      // convert char to int
      int num = strin[i] - '0';
      if (strin[i + 1] == '(')
      {
        // Characters within brackets
        for (j = i + 1;
             strin[j] != ')'; j++)
        {
          if ((strin[j] >= 'a' &&
               strin[j] <= 'z') ||
              (strin[j] >= 'A' &&
               strin[j] <= 'Z'))
          {
            temp += strin[j];
          }
        }
 
        // Expanding
        for (int k = 1; k <= num; k++)
        {
          Console.Write(temp);
        }
 
        // Reset the variables
        num = 0;
        temp = "";
 
        if (j < strin.Length)
        {
          i = j;
        }
      }
    }
  }
}
 
// Driver code
public static void Main(String [] args)
{
  string strin = "3(ab)4(cd)";
  expandString(strin);
}
}
 
// This code is contributed by Chitranayal

Javascript

<script>
// Javascript implementation of the approach
     
    // Function to expand and print the given string
    function expandString(strin)
    {
        let temp = "";
        let j;
  
        for (let i = 0; i < strin.length; i++) {
            if (strin[i].charCodeAt(0) >= 0) {
  
                // Subtract '0' to convert char to int
                let num = strin[i].charCodeAt(0) - '0'.charCodeAt(0);
                if (strin[i+1] == '(') {
  
                    // Characters within brackets
                    for (j = i + 1; strin[j] != ')'; j++) {
                        if ((strin[j] >= 'a'
                             && strin[j] <= 'z')
                            || (strin[j] >= 'A'
                                && strin[j] <= 'Z')) {
                            temp += strin[j];
                        }
                    }
  
                    // Expanding
                    for (let k = 1; k <= num; k++) {
                        document.write(temp);
                    }
  
                    // Reset the variables
                    num = 0;
                    temp = "";
  
                    if (j < strin.length) {
                        i = j;
                    }
                }
            }
        }
    }
     
    // Driver code
    let strin = "3(ab)4(cd)";
    expandString(strin);
 
 
// This code is contributed by rag2127
</script>
Producción: 

abababcdcdcdcd

 

Complejidad temporal: O(N*N)
Espacio auxiliar: O(1)

Publicación traducida automáticamente

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