# Decrypt message from given code by replacing all * with prefix values of encoded string

• Difficulty Level : Medium
• Last Updated : 29 Dec, 2021

Given a string str of length of N that is in the encoded form with alphabets and * . The task is to find the string from which it was generated. The required string can be generated from the encoded string by replacing all the * with the prefix values of the encoded string.

Examples:

Input: str =  ab*c*d
Output: “ababcababcd”
Explanation: For the first occurrence of  “*”, “ab” is the prefix. So ‘*’ is replaced by “ab” resulting the string  to be “ababc*d”  and for the next ‘*‘ the prefix is “ababc”. So the string will now change from “ababc*d” to “ababcababcd”.

Input :  str = “z*z*z”
Output:  zzzzzzz

Approach: The solution is based on greedy approach. Follow the steps mentioned below to solve the problem:

• Consider an empty string result.
• Iterate over the given coded string.
• if the current character in the string is not “*” then add the current character to the result.
• Otherwise, if the current character is “*”, add the result string formed till now with itself.
• Return the result.

Below is the implementation of the given approach.

## C++

 `// C++ code to implement above approach``#include ``using` `namespace` `std;`` ` `// Function to return a string``// found from the coded string``string findstring(string str)``{``    ``// Declaring string to store result``    ``string result = ``""``;`` ` `    ``// Loop to generate the original string``    ``for` `(``int` `i = 0; str[i] != ``'\0'``; i++) {``        ``// If current character in string``        ``// is '*' add result to itself``        ``if` `(str[i] == ``'*'``)``            ``result += result;`` ` `        ``// Else add current element only``        ``else``            ``result += str[i];``    ``}``    ``// Return the result``    ``return` `result;``}`` ` `// Driver code``int` `main()``{``    ``string str = ``"ab*c*d"``;``    ``cout << findstring(str);``    ``return` `0;``}`

## Java

 `// Java code to implement above approach``class` `GFG {`` ` `    ``// Function to return a string``    ``// found from the coded string``    ``static` `String findstring(String str)``    ``{`` ` `        ``// Declaring string to store result``        ``String result = ``""``;`` ` `        ``// Loop to generate the original string``        ``for` `(``int` `i = ``0``; i < str.length(); i++) {`` ` `            ``// If current character in string``            ``// is '*' add result to itself``            ``if` `(str.charAt(i) == ``'*'``)``                ``result += result;`` ` `            ``// Else add current element only``            ``else``                ``result += str.charAt(i);``        ``}`` ` `        ``// Return the result``        ``return` `result;``    ``}`` ` `    ``// Driver code``    ``public` `static` `void` `main(String[] args)``    ``{``        ``String str = ``"ab*c*d"``;``        ``System.out.println(findstring(str));``    ``}``}`` ` `// This code is contributed by ukasp.`

## Python3

 `# Python code for the above approach`` ` `# Function to return a string``# found from the coded string``def` `findstring(``str``):``   ` `    ``# Declaring string to store result``    ``result ``=` `""`` ` `    ``# Loop to generate the original string``    ``for` `i ``in` `range``(``len``(``str``)):``       ` `        ``# If current character in string``        ``# is '*' add result to itself``        ``if` `(``str``[i] ``=``=` `'*'``):``                ``result ``+``=` `result`` ` `        ``# Else add current element only``        ``else``:``                ``result ``+``=` `str``[i]``    ``# Return the result``    ``return` `result`` ` `# Driver code``str` `=` `"ab*c*d"``print``(findstring(``str``))`` ` `# This code is contributed by Saurabh Jaiswal`

## C#

 `// C# code to implement above approach``using` `System;``class` `GFG``{`` ` `  ``// Function to return a string``  ``// found from the coded string``  ``static` `string` `findstring(``string` `str)``  ``{`` ` `    ``// Declaring string to store result``    ``string` `result = ``""``;`` ` `    ``// Loop to generate the original string``    ``for` `(``int` `i = 0; i < str.Length; i++)``    ``{`` ` `      ``// If current character in string``      ``// is '*' add result to itself``      ``if` `(str[i] == ``'*'``)``        ``result += result;`` ` `      ``// Else add current element only``      ``else``        ``result += str[i];``    ``}`` ` `    ``// Return the result``    ``return` `result;``  ``}`` ` `  ``// Driver code``  ``public` `static` `void` `Main()``  ``{``    ``string` `str = ``"ab*c*d"``;``    ``Console.Write(findstring(str));`` ` `  ``}``}`` ` `// This code is contributed by Samim Hossain Mondal.`

## Javascript

 ``

Output

`ababcababcd`

Time Complexity: O(N)
Auxiliary Space: O(N)

My Personal Notes arrow_drop_up