Restore original String from given Encrypted String by the given operations
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 |
This should be easy!
Time Complexity: O(N)
Auxiliary Space: O(1)