VOOZH about

URL: https://www.geeksforgeeks.org/dsa/reconstruct-original-string-from-resultant-string-based-on-given-encoding-technique/

⇱ Reconstruct original string from resultant string based on given encoding technique - GeeksforGeeks


  • Courses
  • Tutorials
  • Interview Prep

Reconstruct original string from resultant string based on given encoding technique

Last Updated : 27 Jan, 2022

A binary string S of length N is constructed from a string P of N characters and an integer X. The choice of the ith character of S is as follows:

  • If the character Pi-X exists and is equal to 1, then Si is 1
  • if the character Pi+X exists and is equal to 1, then Si is 1
  • if both of the aforementioned conditions are false, then Si is 0.

Given the resulting string S and the integer X, reconstruct the original string P. If no string P can produce the string S, output -1.

Examples:

Input: S = "10011", X = 2
Output: "01100"
Explanation: The input string S = "10011" can be constructed from the output string P = "01100".


Input: S = "11101100111", X = 3
Output: -1
Explanation: The input string S = "11101100111" cannot be constructed from any output string P.

Approach: The task can be solved by taking an auxiliary string with all 1s. Follow the below steps to solve the problem:

  • Initialize the string P with all the characters as '1'.
  • Now traverse the string S using a loop and put zeroes at the correct positions in P according to the given conditions:
    • If S[i] is equal to '0' and P[i-X] exists, i, e, (i-X)>=0, then put P[i-X] = '0'.
    • If S[i] is equal to '0' and P[i+X] exists, i.e, (i+X)<N, then put P[i+X] = '0'.
  • Initialize a variable flag = 1 to determine whether the string P exists or not.
  • To check for the correctness of the constructed string P, traverse the string S using a for loop:
    • If S[i]=='1' and either P[i-X] or P[i+X] exists and is equal to '1', then the string P is so far correct and the traversal can continue.
    • If S[i]=='1' and either P[i-X] or P[i+X] does not exist or is not equal to 1, then set flag = 0, output -1 and break from the loop.
  • If the flag is equal to 0 after the traversal of the string S, then output the original string P.

Below is the implementation of the above approach:

 
 


Output: 
01100

 


 

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


 

Comment