Open In App

Restore original String from given Encrypted String by the given operations

Last Updated : 23 Jan, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a string str and a positive integer N, the task is to reverse N characters and skip N characters until the end of the string to generate the encrypted message.

Examples:

Input: str = “ihTs suohld ebeas!y”, K = 3 
Output: This should be easy! 
Explanation: 
Reverse “ihT” -> “Thi” 
“s” remains the same 
“uoh” -> “hou”, and so on.

Input: str = “!ysae eb dluohs sihT”, K = 30 
Output: This should be easy! 
Explanation: 
Since 30 is larger than the length of the given string(= 20), just print the reverse of the string. 
 

Approach: Follow the steps below to solve the problem:

  • Traverse the given string.
  • Increment the iterator by 2 * N.
  • Reverse N characters step by step.

Below is the implementation of the above approach:

C++




// C++ Program to implement
// the above approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to decrypt and print the
// original strings
int decryptString(string s, unsigned int N)
{
 
    for (unsigned int i = 0; i < s.size();
         i += 2 * N) {
        auto end = s.begin() + i + N;
     
 
        // If length is exceeded
        if (i + N > s.size())
            end = s.end();
 
        // Reverse the string
        reverse(s.begin() + i, end);
           
       
    }
 
    cout << s << endl;
}
 
// Driver Code
int main()
{
    string s = "ihTs suohld  ebeas!y";
    unsigned int N = 3;
    decryptString(s, N);
 
    return 0;
}


Java




// Java Program to implement
// the above approach
import java.io.*;
 
class GFG {
 
  // utility function to reverse the string from start to end -1 index
  static String reverse_(String s ,int start ,int end)
  {
    String str="";
    for(int i = 0;i<start;i++)
      str += s.charAt(i);
    for(int i = end-1;i>=start;i--)
      str += s.charAt(i);
    for(int i = end; i<s.length();i++)
      str += s.charAt(i);
    return str;
  }
  // Function to decrypt and print the
  // original strings
  static void decryptString(String s, int N)
  {
 
    for(int i = 0; i < s.length(); i += 2*N) {
      int end = i + N;
 
      // If length is exceeded
      if (i + N > s.length())
        end = s.length();
 
      // Reverse the string
      s = reverse_(s, i, end);
    }
 
    System.out.println(s);
  }
 
  public static void main(String[] args)
  {
    String s = "ihTs suohld  ebeas!y";
    int N = 3;
    decryptString(s, N);
  }
}
 
// This code is contributed by AKSHAY TRIPATHI


C#




using System;
 
class GFG
{
    // utility function to reverse the string from start to end -1 index
    static string Reverse_(string s, int start, int end)
    {
        string str = "";
        for (int i = 0; i < start; i++)
            str += s[i];
        for (int i = end - 1; i >= start; i--)
            str += s[i];
        for (int i = end; i < s.Length; i++)
            str += s[i];
        return str;
    }
    // Function to decrypt and print the
    // original strings
    static void DecryptString(string s, int N)
    {
        for (int i = 0; i < s.Length; i += 2 * N)
        {
            int end = i + N;
 
            // If length is exceeded
            if (i + N > s.Length)
                end = s.Length;
 
            // Reverse the string
            s = Reverse_(s, i, end);
        }
 
        Console.WriteLine(s);
    }
 
    public static void Main(string[] args)
    {
        string s = "ihTs suohld  ebeas!y";
        int N = 3;
        DecryptString(s, N);
    }
}


Python3




# Python3 program to implement
# the above approach
 
# Function to decrypt and print the
# original strings
def decryptString(s, N):
     
    for i in range(0, len(s), 2 * N):
        if (i + N < len(s)):
            end = s[i + N]
             
        # If length is exceeded
        if (i + N > len(s)):
            end = s[-1]
 
        # Reverse the string
        if (i == 0):
            s = s[i + N - 1::-1] + s[i + N:]
        else:
            s = s[:i] + s[i + N - 1:i - 1:-1] + s[i + N:]
 
    print(s)
 
# Driver Code
if __name__ == "__main__":
 
    s = "ihTs suohld  ebeas!y"
    N = 3
     
    decryptString(s, N)
 
# This code is contributed by ukasp


Javascript




// JavascriptProgram to implement
// the above approach
 
//utility function to reverse the string from start to end -1 index
function reverse_(s , start , end)
{
    end -= 1;
    while(start<end)
    {
        var temp = s[start];
        s[start] = s[end];
        s[end] = temp;
        start++;
        end--;
    }
    return s;
}
// Function to decrypt and print the
// original strings
function decryptString( s, N)
{
 
    for (var i = 0; i < s.length;i += 2 * N) {
        var end = i + N;
     
 
        // If length is exceeded
        if (i + N > s.length)
            end = s.length;
 
        // Reverse the string
        s = reverse_(s, i, end);
           
    }
 
    console.log(s);
}
 
// Driver Code
    var s = "ihTs suohld  ebeas!y";
    var N = 3;
    decryptString(s, N);
  
 // This code is contributed by Abhijeet Kumar(abhijeet19403)


Output: 

This should be easy!

 

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



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads