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>
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