Skip to content
Related Articles

Related Articles

Restore original String from given Encrypted String by the given operations
  • Last Updated : 10 Mar, 2021

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

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
Output: 
This should be easy!

 

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

My Personal Notes arrow_drop_up
Recommended Articles
Page :