Encryption is a technique that changes data by using certain techniques or certain steps so that it changes to another kind of information or from which the previous information cannot be directly collected. For encryption, we have to follow certain steps that are fixed for the specific encryption type.
In this question we will get a string and we have to encrypt it by following the given steps -
First we have to get all substrings that contain the same character and replace that substring with a single character followed by the length of the substring.
Now, change the length to a hexadecimal value and all characters of the hexadecimal value must be changed to lowercase.
Finally, reverse the entire string.
Input 1: string str = "aabbbcccc"
Output: "4c3b2a"
First, we will get all the substrings that contain the same number of characters and replace them with the frequency of the characters, which will give us the string "a2b3c4". Now we change the length to a hexadecimal value, but 2, 3 and 4 have the same value in hexadecimal form. Finally we reverse the string and the end result will be 4c3b2a.
Input2: string str = "oooooooooooo"
Output: "co"
First, we convert the string into the frequency string "o12". Now, the hexadecimal value of 12 is C, we change it to lowercase i.e. c and replace it into the string and then reverse the string.
From the above example, we have an idea about the problem, now let us enter the implementation part -
In implementation, first, we will implement a function that takes input as an integer and returns a string as the return value.
This function will be used to convert the given integer to a hexadecimal value, with one modification, using lowercase English letters instead of uppercase English characters.
We will define another function in which we will use a for loop to iterate through the string and then for the substring of the same character we will use a while loop until we find a character that is equal to the current character .
We will calculate the frequency and change it to a hexadecimal value and add it to the string with the current index character.
Finally, we reverse the string and return it to the main function for printing.
#include <bits/stdc++.h> using namespace std; // function to convert the integer to hexadecimal values string convertToHexa(int val){ string res = ""; // string to store the result while(val != 0){ int cur = val %16; // getting the mode of the current value if(cur < 10){ res += '0' + cur; } else{ res += 87 + cur; // adding 87 to get the lowercase letters } val /= 16; // updating the current value } return res; } // function to encrypt the string string encrypt(string str){ int len = str.length(); // getting the length of the string int freq = 0; // variable to store the frequency string ans = ""; // string to store the answer // traversing over the string for(int i=0; i<len; i++){ int j = i; // variable to keep track the substring with the same character while(j < len && str[j] == str[i]){ j++; } freq = j-i; ans += str[i]; // calling the function to get the hexadecimal value string hexaValue = convertToHexa(freq); ans += hexaValue; i = j-1; } // reversing the string reverse(ans.begin(), ans.end()); return ans; } // main function int main(){ string str = "aaabbbbccccccccccc"; // given string // calling the function to get the encrypted string cout<<"The given string after the encryption is: "<<encrypt(str)<<endl; return 0; }
The given string after the encryption is: bc4b3a
Time and Space Complexity
The time complexity of the above code is O(N), where N is the size of the given string. It took us N time to iterate over the string, while reversing the string took less than N time.
The space complexity of the above code to store the final string is O(N), if we ignore this, no extra space will be used.
Notice
Encryption can be done in an infinite number of ways, and is only concerned with defining the rules to encrypt the keys. The main characteristic of encryption is that it must give the same result every time for the same input.
In this tutorial, we implemented a code that encrypts a given string according to rules. First, we have to get substrings containing elements of the same type and replace them with characters and their frequencies. Next, we change the frequency to a hexadecimal number and finally reverse the entire string. The time complexity of the above code is O(N).
The above is the detailed content of encrypted string. For more information, please follow other related articles on the PHP Chinese website!