Restore original String from given Encrypted String by the given operations
Last Updated :
23 Jan, 2023
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++
#include <bits/stdc++.h>
using namespace std;
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 (i + N > s.size())
end = s.end();
reverse(s.begin() + i, end);
}
cout << s << endl;
}
int main()
{
string s = "ihTs suohld ebeas!y" ;
unsigned int N = 3;
decryptString(s, N);
return 0;
}
|
Java
import java.io.*;
class GFG {
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;
}
static void decryptString(String s, int N)
{
for ( int i = 0 ; i < s.length(); i += 2 *N) {
int end = i + N;
if (i + N > s.length())
end = s.length();
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);
}
}
|
C#
using System;
class GFG
{
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;
}
static void DecryptString( string s, int N)
{
for ( int i = 0; i < s.Length; i += 2 * N)
{
int end = i + N;
if (i + N > s.Length)
end = s.Length;
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
def decryptString(s, N):
for i in range ( 0 , len (s), 2 * N):
if (i + N < len (s)):
end = s[i + N]
if (i + N > len (s)):
end = s[ - 1 ]
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)
if __name__ = = "__main__" :
s = "ihTs suohld ebeas!y"
N = 3
decryptString(s, N)
|
Javascript
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 decryptString( s, N)
{
for ( var i = 0; i < s.length;i += 2 * N) {
var end = i + N;
if (i + N > s.length)
end = s.length;
s = reverse_(s, i, end);
}
console.log(s);
}
var s = "ihTs suohld ebeas!y" ;
var N = 3;
decryptString(s, N);
|
Output:
This should be easy!
Time Complexity: O(N)
Auxiliary Space: O(1)
Share your thoughts in the comments
Please Login to comment...