Open In App

Decode a median string to the original string

Last Updated : 18 Sep, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a string s written in median form, change it back to the original string. The median letter in a string is the letter that is in the middle of the string. If the string’s length is even, the median letter is the left of the two middle letters. The given string is formed by writing down the median letter of the word, then deleting it and repeating the process until there are no letters left. 

Examples:  

Input: eekgs
Output: geeks 
Explanation: in the original string “geeks” 
can be written in median form by picking up 
e first then, again e, then k then g and at
the end s. As these are the median when the
median letter is picked and deleted. 

Input: abc 
Output: bac 
Explanation: median of bac is a, then median
of bc is b, then median of c is c.  

To find the answer we can iterate through the given encoded string from left to right and add each letter in the answer string, one letter to the beginning, next letter to the end, next letter to begin, and so on. If n is even then the first letter must be added to the beginning and the second letter to the end. In the other case, the first letter to the end, second to the beginning. We need to make it until we do not add all letters from the given string. 

Note: For strings with even length, when we add the first character to begin and the second character to the end then the remaining string will always be of even length. The same is true for strings with odd lengths.

Given below is the implementation of the above approach 

C++




<div id="highlighter_83851" class="syntaxhighlighter nogutter  "><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="code"><div class="container"><div class="line number1 index0 alt2"><code class="comments">// C++ program to decode a median string </code></div><div class="line number2 index1 alt1"><code class="comments">// to the original string </code></div><div class="line number3 index2 alt2"><code class="undefined spaces"> </code> </div><div class="line number4 index3 alt1"><code class="preprocessor">#include <bits/stdc++.h> </code></div><div class="line number5 index4 alt2"><code class="keyword bold">using</code> <code class="keyword bold">namespace</code> <code class="plain">std; </code></div><div class="line number6 index5 alt1"><code class="undefined spaces"> </code> </div><div class="line number7 index6 alt2"><code class="comments">// function to calculate the median back string </code></div><div class="line number8 index7 alt1"><code class="plain">string decodeMedianString(string s) </code></div><div class="line number9 index8 alt2"><code class="plain">{ </code></div><div class="line number10 index9 alt1"><code class="undefined spaces">    </code><code class="comments">// length of string </code></div><div class="line number11 index10 alt2"><code class="undefined spaces">    </code><code class="color1 bold">int</code> <code class="plain">l = s.length(); </code></div><div class="line number12 index11 alt1"><code class="undefined spaces"> </code> </div><div class="line number13 index12 alt2"><code class="undefined spaces">    </code><code class="comments">// initialize a blank string </code></div><div class="line number14 index13 alt1"><code class="undefined spaces">    </code><code class="plain">string s1 = </code><code class="string">""</code><code class="plain">; </code></div><div class="line number15 index14 alt2"><code class="undefined spaces"> </code> </div><div class="line number16 index15 alt1"><code class="undefined spaces">    </code><code class="comments">// Flag to check if length is even or odd </code></div><div class="line number17 index16 alt2"><code class="undefined spaces">    </code><code class="color1 bold">bool</code> <code class="plain">isEven = (l % 2 == 0)? </code><code class="keyword bold">true</code> <code class="plain">: </code><code class="keyword bold">false</code><code class="plain">; </code></div><div class="line number18 index17 alt1"><code class="undefined spaces"> </code> </div><div class="line number19 index18 alt2"><code class="undefined spaces">    </code><code class="comments">// traverse from first to last </code></div><div class="line number20 index19 alt1"><code class="undefined spaces">    </code><code class="keyword bold">for</code> <code class="plain">(</code><code class="color1 bold">int</code> <code class="plain">i = 0; i < l; i += 2) { </code></div><div class="line number21 index20 alt2"><code class="undefined spaces"> </code> </div><div class="line number22 index21 alt1"><code class="undefined spaces">        </code><code class="comments">// if len is even then add first character </code></div><div class="line number23 index22 alt2"><code class="undefined spaces">        </code><code class="comments">// to beginning of new string and second </code></div><div class="line number24 index23 alt1"><code class="undefined spaces">        </code><code class="comments">// character to end </code></div><div class="line number25 index24 alt2"><code class="undefined spaces">        </code><code class="keyword bold">if</code> <code class="plain">(isEven) {    </code></div><div class="line number26 index25 alt1"><code class="undefined spaces">            </code><code class="plain">s1 = s[i] + s1; </code></div><div class="line number27 index26 alt2"><code class="undefined spaces">            </code><code class="plain">s1 += s[i + 1]; </code></div><div class="line number28 index27 alt1"><code class="undefined spaces">        </code><code class="plain">} </code><code class="keyword bold">else</code> <code class="plain">{ </code></div><div class="line number29 index28 alt2"><code class="undefined spaces"> </code> </div><div class="line number30 index29 alt1"><code class="undefined spaces">            </code><code class="comments">// if current length is odd and is </code></div><div class="line number31 index30 alt2"><code class="undefined spaces">            </code><code class="comments">// greater than 1 </code></div><div class="line number32 index31 alt1"><code class="undefined spaces">            </code><code class="keyword bold">if</code> <code class="plain">(l - i > 1) { </code></div><div class="line number33 index32 alt2"><code class="undefined spaces"> </code> </div><div class="line number34 index33 alt1"><code class="undefined spaces">                </code><code class="comments">// add first character to end and </code></div><div class="line number35 index34 alt2"><code class="undefined spaces">                </code><code class="comments">// second character to beginning </code></div><div class="line number36 index35 alt1"><code class="undefined spaces">                </code><code class="plain">s1 += s[i]; </code></div><div class="line number37 index36 alt2"><code class="undefined spaces">                </code><code class="plain">s1 = s[i + 1] + s1; </code></div><div class="line number38 index37 alt1"><code class="undefined spaces">            </code><code class="plain">} </code><code class="keyword bold">else</code> <code class="plain">{ </code></div><div class="line number39 index38 alt2"><code class="undefined spaces"> </code> </div><div class="line number40 index39 alt1"><code class="undefined spaces">                </code><code class="comments">// if length is 1, add character   </code></div><div class="line number41 index40 alt2"><code class="undefined spaces">                </code><code class="comments">// to end </code></div><div class="line number42 index41 alt1"><code class="undefined spaces">                </code><code class="plain">s1 += s[i]; </code></div><div class="line number43 index42 alt2"><code class="undefined spaces">            </code><code class="plain">} </code></div><div class="line number44 index43 alt1"><code class="undefined spaces">        </code><code class="plain">} </code></div><div class="line number45 index44 alt2"><code class="undefined spaces">    </code><code class="plain">} </code></div><div class="line number46 index45 alt1"><code class="undefined spaces"> </code> </div><div class="line number47 index46 alt2"><code class="undefined spaces">    </code><code class="keyword bold">return</code> <code class="plain">s1; </code></div><div class="line number48 index47 alt1"><code class="plain">} </code></div><div class="line number49 index48 alt2"><code class="undefined spaces"> </code> </div><div class="line number50 index49 alt1"><code class="comments">// driver program  </code></div><div class="line number51 index50 alt2"><code class="color1 bold">int</code> <code class="plain">main() </code></div><div class="line number52 index51 alt1"><code class="plain">{ </code></div><div class="line number53 index52 alt2"><code class="undefined spaces">    </code><code class="plain">string s = </code><code class="string">"eekgs"</code><code class="plain">; </code></div><div class="line number54 index53 alt1"><code class="undefined spaces">    </code><code class="plain">cout << decodeMedianString(s); </code></div><div class="line number55 index54 alt2"><code class="undefined spaces">    </code><code class="keyword bold">return</code> <code class="plain">0; </code></div><div class="line number56 index55 alt1"><code class="plain">} </code></div></div></td></tr></tbody></table></div>


Java





Python3





C#





Javascript




<script>
// javascript program to decode a median
// string to the original string
  
  
  
    // function to calculate the
    // median back string
    function decodeMedianString( s) {
  
        // length of string
        var l = s.length;
  
        // initialize a blank string
        var s1 = "";
  
        // Flag to check if length is
        // even or odd
        var isEven = (l % 2 == 0) ? true : false;
  
        // traverse from first to last
        for (i = 0; i < l; i += 2) {
  
            // if len is even then add
            // first character to
            // beginning of new string
            // and second character to
            // end
            if (isEven) {
                s1 = s.charAt(i) + s1;
                s1 += s.charAt(i + 1);
            } else {
  
                // if current length is
                // odd and is greater
                // than 1
                if (l - i > 1) {
  
                    // add first character
                    // to end and second
                    // character to
                    // beginning
                    s1 += s.charAt(i);
                    s1 = s.charAt(i + 1) + s1;
                } else {
  
                    // if length is 1,
                    // add character
                    // to end
                    s1 += s.charAt(i);
                }
            }
        }
  
        return s1;
    }
  
    // Driver code
      
        var s = "eekgs";
  
        document.write(decodeMedianString(s));
  
// This code contributed by Rajput-Ji 
</script>


Output

geeks

Time Complexity: O(N), as we are using a loop to traverse N times.
Auxiliary Space: O(1), as we are not using any extra space.

 



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads