Skip to content
Related Articles

Related Articles

Improve Article
Save Article
Like Article

Modify array by removing characters from their Hexadecimal representations which are present in a given string

  • Last Updated : 16 Mar, 2021

Given an array arr[] of size N and a string S, the task is to modify given array by removing all characters from their hexadecimal representations that are present in S and then replacing the equivalent decimal element back into the array.

Examples:

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.

Input: arr[] = {74, 91, 31, 122}, S = “1AB”
Output: {4, 5, 15, 7}
Explanation:  
74 -> (4A)16 -> (4)16 -> 4
91 -> (5B)16 -> (5)16 -> 5
31 -> (1F)16 -> (F)16 -> 15
122 -> (7A)16 -> (7)16 -> 7



Input: arr[] = {1450, 1716, 284, 843}, S = “ABFE3”
Output: {5, 100, 284, 4}

Approach: Follow the steps below to solve the 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 a decimal number
// to its equivalent hexadecimal number
string decHex(int n)
{
  char alpha[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
  string ans;
  while (n > 0) {
    if (n % 16 < 10) {
      ans += to_string(n % 16);
    }
    else {
      ans += alpha[n % 16 - 10];
    }
    n /= 16;
  }
  reverse(ans.begin(), ans.end());
  return ans;
}
 
// Function to convert hexadecimal number
// to its equavalent decimal number
int hexDec(string convertedHex)
{
 
  // Stores characters with their
  // respective hexadecimal values
  char mp[] = { 10, 11, 12, 13, 14, 15 };
 
  // Stores answer
  int ans = 0;
  int pos = 0;
 
  // Traverse the string
  reverse(convertedHex.begin(), convertedHex.end());
  for (char ch : convertedHex) {
 
    // If digit
    if (isdigit(ch)) {
      ans += ((int)pow(16, pos)) * (ch - '0');
    }
 
    // If character
    else {
      ans += ((int)pow(16, pos)) * mp[ch - 'A'];
    }
    pos += 1;
  }
  // Return the answer
  return ans;
}
 
// Function to move all the
// alphabets to front
string removeChars(string hexaVal, string S)
{
  set<char> setk;
  for (char ch : S) {
    setk.insert(ch);
  }
  string ans = "";
  for (char ch : hexaVal) {
    if (setk.find(ch) != setk.end()) {
      continue;
    }
    ans += ch;
  }
  return ans;
}
 
// Function to modify each array
// element by removing characters
// from their hexadecimal representation
// which are present in a given string
void convertArr(int arr[], int N, string S)
{
 
  // Traverse the array
  for (int i = 0; i < N; i++) {
 
    // Stores hexadecimal value
    string hexaVal = decHex(arr[i]);
 
    // Remove the characters from hexadecimal
    // representation present in string S
    string convertedHex = removeChars(hexaVal, S);
 
    // Stores decimal value
    int decVal = hexDec(convertedHex);
 
    // Replace array element
    arr[i] = decVal;
  }
 
  // Print the modified array
  for (int i = 0; i < N; i++) {
    cout << arr[i] << " ";
  }
}
 
// Driven Program
int main()
{
  // Given array
  int arr[] = { 74, 91, 31, 122 };
  int N = sizeof(arr) / sizeof(arr[0]);
 
  // Given string
  string S = "1AB";
 
  // Function call to modify
  // array by given operations
  convertArr(arr, N, S);
 
  return 0;
}
 
// This code is contributed by Kingash.

Java




// java program for the above approach
import java.io.*;
import java.lang.*;
import java.util.*;
 
class GFG {
 
  // Function to convert a decimal number
  // to its equivalent hexadecimal number
  static String decHex(int n)
  {
    char alpha[] = { 'A', 'B', 'C', 'D', 'E', 'F' };
    StringBuilder ans = new StringBuilder("");
    while (n > 0) {
      if (n % 16 < 10) {
        ans.append(Integer.toString(n % 16));
      }
      else {
        ans.append(alpha[n % 16 - 10]);
      }
      n /= 16;
    }
    ans = ans.reverse();
    return ans.toString();
  }
 
  // Function to convert hexadecimal number
  // to its equavalent decimal number
  static int hexDec(String convertedHex)
  {
 
    // Stores characters with their
    // respective hexadecimal values
    char mp[] = { 10, 11, 12, 13, 14, 15 };
 
    // Stores answer
    int ans = 0;
    int pos = 0;
 
    // Traverse the string
    StringBuilder s = new StringBuilder(convertedHex);
    convertedHex = s.reverse().toString();
    for (char ch : convertedHex.toCharArray()) {
 
      // If digit
      if (Character.isDigit(ch)) {
        ans += ((int)Math.pow(16, pos))
          * (ch - '0');
      }
 
      // If character
      else {
        ans += ((int)Math.pow(16, pos))
          * mp[ch - 'A'];
      }
      pos += 1;
    }
    // Return the answer
    return ans;
  }
 
  // Function to move all the
  // alphabets to front
  static String removeChars(String hexaVal, String S)
  {
    HashSet<Character> setk = new HashSet<>();
    for (char ch : S.toCharArray()) {
      setk.add(ch);
    }
    String ans = "";
    for (char ch : hexaVal.toCharArray()) {
      if (setk.contains(ch)) {
        continue;
      }
      ans += ch;
    }
    return ans;
  }
 
  // Function to modify each array
  // element by removing characters
  // from their hexadecimal representation
  // which are present in a given string
  static void convertArr(int arr[], String S)
  {
 
    // Traverse the array
    for (int i = 0; i < arr.length; i++) {
 
      // Stores hexadecimal value
      String hexaVal = decHex(arr[i]);
 
      // Remove the characters from hexadecimal
      // representation present in string S
      String convertedHex = removeChars(hexaVal, S);
 
      // Stores decimal value
      int decVal = hexDec(convertedHex);
 
      // Replace array element
      arr[i] = decVal;
    }
 
    // Print the modified array
    for (int val : arr) {
      System.out.print(val + " ");
    }
  }
 
  // Driver Code
  public static void main(String[] args)
  {
 
    // Given array
    int arr[] = { 74, 91, 31, 122 };
 
    // Given string
    String S = "1AB";
 
    // Function call to modify
    // array by given operations
    convertArr(arr, S);
  }
}
 
// This code is contributed by Kingash.

Python3




# Python3 program for the above approach
 
# Function to convert a decimal number
# to its equivalent hexadecimal number
def decHex(n):
    alpha = ['A', 'B', 'C', 'D', 'E', 'F']
    ans = ''
    while n:
        if n % 16 < 10:
            ans += str(n % 16)
        else:
            ans += alpha[n % 16 - 10]
        n //= 16
 
    ans = ans[::-1]
    return ans
 
# Function to convert hexadecimal number
# to its equavalent decimal number
def hexDec(convertedHex):
 
    # Stores characters with their
    # respective hexadecimal values
    mp = {"A": 10, "B": 11, "C": 12,
           "D": 13, "E": 14, "F": 15}
 
    # Stores answer
    ans = 0
    pos = 0
 
    # Traverse the string
    for i in convertedHex[::-1]:
 
        # If digit
        if i.isdigit():
            ans += (16**pos)*int(i)
 
        # If character
        else:
            ans += (16**pos)*mp[i]
        pos += 1
 
    # Return the answer
    return ans
 
# Function to move all the
# alphabets to front
def removeChars(hexaVal, S):
    setk = set()
    for i in S:
        setk.add(i)
    ans = ''
    for i in hexaVal:
        if i in setk:
            continue
        ans += i
 
    return ans
 
# Function to modify each array
# element by removing characters
# from their hexadecimal representation
# which are present in a given string
def convertArr(arr, S):
 
    # Traverse the array
    for i in range(len(arr)):
 
        # Stores hexadecimal value
        hexaVal = decHex(arr[i])
 
        # Remove the characters from hexadecimal
        # representation present in string S
        convertedHex = removeChars(hexaVal, S)
 
        # Stores decimal value
        decVal = hexDec(convertedHex)
 
        # Replace array element
        arr[i] = decVal
 
    # Print the modified array
    print(arr)
 
 
# Driver Code
# Given array
arr = [74, 91, 31, 122]
 
# Given string
S = "1AB"
 
# Function call to modify
# array by given operations
convertArr(arr, S)
Output: 
[4, 5, 15, 7]

 

Time Complexity: O(N * |S|)
Auxiliary Space: O(|S|)




My Personal Notes arrow_drop_up
Recommended Articles
Page :