Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Encrypt the string – 2

  • Last Updated : 28 Jul, 2021

Given a string S consisting of N, lower case English alphabet, it is also given that a string is encrypted by first replacing every substring of the string consisting of the same character with the concatenation of that character and the hexadecimal representation of the size of the substring and then revering the whole string, the task is to find the encrypted string. 

Note: All Hexadecimal letters should be converted to Lowercase letters.

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Examples:



Input: S = “aaaaaaaaaaa”
Output: ba  
Explanation:

  1. First convert the given string to “a11” i.e. write, character along with its frequency.
  2. Then, change “a11” to “ab” because 11 is b in hexadecimal.
  3. Then, finally reverse the string i.e “ba”.

Input: S = “abc”
Output: 1c1b1a

 

Approach: The problem can be solved by iterating over the characters of the string S. Follow the steps below to solve this problem:

Below is the implementation of the above approach:

C++




// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to convert Decimal to Hex
string convertToHex(int num)
{
 
    string temp = "";
    while (num != 0) {
        int rem = num % 16;
        char c;
        if (rem < 10) {
            c = rem + 48;
        }
        else {
            c = rem + 87;
        }
        temp += c;
        num = num / 16;
    }
 
    return temp;
}
 
// Function to encrypt the string
string encryptString(string S, int N)
{
 
    string ans = "";
 
    // Iterate the characters
    // of the string
    for (int i = 0; i < N; i++) {
 
        char ch = S[i];
        int count = 0;
        string hex;
 
        // Iterate until S[i] is equal to ch
        while (i < N && S[i] == ch) {
 
            // Update count and i
            count++;
            i++;
        }
 
        // Decrement i by 1
        i--;
 
        // Convert count to hexadecimal
        // representation
        hex = convertToHex(count);
 
        // Append the character
        ans += ch;
 
        // Append the characters frequency
        // in hexadecimal representation
        ans += hex;
    }
 
    // Reverse the obtained answer
    reverse(ans.begin(), ans.end());
 
    // Return required answer
    return ans;
}
 
// Driver Code
int main()
{
 
    // Given Input
    string S = "abc";
    int N = S.size();
 
    // Function Call
    cout << encryptString(S, N);
 
    return 0;
}

Java




// Java program for above approach
import java.awt.*;
import java.util.*;
class GFG
{
 
    // Function to convert Decimal to Hex
    static String convertToHex(int num)
    {
 
        StringBuilder temp = new StringBuilder();
        while (num != 0) {
            int rem = num % 16;
            char c;
            if (rem < 10) {
                c = (char) (rem + 48);
            }
            else {
                c = (char) (rem + 87);
            }
            temp.append(c);
            num = num / 16;
        }
 
        return temp.toString();
    }
 
    // Function to encrypt the string
    static String encryptString(String S, int N)
    {
 
        StringBuilder ans = new StringBuilder();
 
        // Iterate the characters
        // of the string
        for (int i = 0; i < N; i++) {
 
            char ch = S.charAt(i);
            int count = 0;
            String hex;
 
            // Iterate until S[i] is equal to ch
            while (i < N && S.charAt(i) == ch) {
 
                // Update count and i
                count++;
                i++;
            }
 
            // Decrement i by 1
            i--;
 
            // Convert count to hexadecimal
            // representation
            hex = convertToHex(count);
 
            // Append the character
            ans.append(ch);
 
            // Append the characters frequency
            // in hexadecimal representation
            ans.append(hex);
        }
 
        // Reverse the obtained answer
        ans.reverse();
 
        // Return required answer
        return ans.toString();
    }
     
    // Driver Code
    public static void main(String[] args)
    {
       
        // Given Input
        String S = "abc";
        int N = S.length();
 
        // Function Call
        System.out.println(encryptString(S, N));
    }
}
 
// This code is contributed by hritikrommie.

Python3




# Python3 program for the above approach
 
# Function to convert Decimal to Hex
def convertToHex(num):
 
    temp = ""
    while (num != 0):
        rem = num % 16
        c = 0
         
        if (rem < 10):
            c = rem + 48
        else:
            c = rem + 87
             
        temp += chr(c)
        num = num // 16
 
    return temp
 
# Function to encrypt the string
def encryptString(S, N):
 
    ans = ""
 
    # Iterate the characters
    # of the string
    for i in range(N):
        ch = S[i]
        count = 0
 
        # Iterate until S[i] is equal to ch
        while (i < N and S[i] == ch):
 
            # Update count and i
            count += 1
            i += 1
 
        # Decrement i by 1
        i -= 1
 
        # Convert count to hexadecimal
        # representation
        hex = convertToHex(count)
 
        # Append the character
        ans += ch
 
        # Append the characters frequency
        # in hexadecimal representation
        ans += hex
 
    # Reverse the obtained answer
    ans = ans[::-1]
     
    # Return required answer
    return ans
 
# Driver Code
if __name__ == '__main__':
     
    # Given Input
    S = "abc"
    N = len(S)
 
    # Function Call
    print(encryptString(S, N))
 
# This code is contributed by mohit kumar 29

C#




// C# program for above approach
using System;
class GFG
{
     
    // Function to convert Decimal to Hex
    static string convertToHex(int num)
    {
  
        string temp = "";
        while (num != 0) {
            int rem = num % 16;
            char c;
            if (rem < 10) {
                c = (char) (rem + 48);
            }
            else {
                c = (char) (rem + 87);
            }
            temp = temp + c;
            num = num / 16;
        }
  
        return temp;
    }
     
    // Function to encrypt the string
    static string encryptString(string S, int N)
    {
  
        string ans = "";
  
        // Iterate the characters
        // of the string
        for (int i = 0; i < N; i++) {
  
            char ch = S[i];
            int count = 0;
            string hex;
  
            // Iterate until S[i] is equal to ch
            while (i < N && S[i] == ch) {
  
                // Update count and i
                count++;
                i++;
            }
  
            // Decrement i by 1
            i--;
  
            // Convert count to hexadecimal
            // representation
            hex = convertToHex(count);
  
            // Append the character
            ans = ans + ch;
  
            // Append the characters frequency
            // in hexadecimal representation
            ans = ans + hex;
        }
  
        // Reverse the obtained answer
        char[] Ans = ans.ToCharArray();
        Array.Reverse(Ans);
        ans = new string(Ans);
  
        // Return required answer
        return ans;
    }
     
  static void Main ()
  {
    // Given Input
    string S = "abc";
    int N = S.Length;
 
    // Function Call
    Console.WriteLine(encryptString(S, N));
  }
}
 
// This code is contributed by suresh07.

Javascript




<script>
 
// JavaScript program for the above approach
 
 
// Function to convert Decimal to Hex
function convertToHex(num) {
 
    let temp = "";
    while (num != 0) {
        let rem = num % 16;
        let c = 0;
        if (rem < 10) {
            c = rem + 48;
        }
        else {
            c = rem + 87;
        }
        temp += String.fromCharCode(c);
        num = Math.floor(num / 16);
    }
 
    return temp;
}
 
// Function to encrypt the string
function encryptString(S, N) {
 
    let ans = "";
 
    // Iterate the characters
    // of the string
    for (let i = 0; i < N; i++) {
 
        let ch = S[i];
        let count = 0;
        let hex;
 
        // Iterate until S[i] is equal to ch
        while (i < N && S[i] == ch) {
 
            // Update count and i
            count++;
            i++;
        }
 
        // Decrement i by 1
        i--;
 
        // Convert count to hexadecimal
        // representation
        hex = convertToHex(count);
 
        // Append the character
        ans += ch;
 
        // Append the characters frequency
        // in hexadecimal representation
        ans += hex;
    }
 
    // Reverse the obtained answer
    ans = ans.split('').reverse().join("");
 
    // Return required answer
    return ans;
}
 
// Driver Code
 
 
// Given Input
let S = "abc";
let N = S.length;
 
// Function Call
document.write(encryptString(S, N));
 
</script>
Output: 
1c1b1a

 

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

 




My Personal Notes arrow_drop_up
Recommended Articles
Page :