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:
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 -> 7Input: arr[] = {1450, 1716, 284, 843}, S = “ABFE3”
Output: {5, 100, 284, 4}
Approach: Follow the steps below to solve the problem:
- Traverse the array arr[]:
- Convert each array element to its equivalent hexadecimal value.
- Remove the characters from the hexadecimal number which are present in the string S.
- Convert the modified hexadecimal number back to its decimal representation.
- Replace the array element with it.
- Print the modified array.
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) |
C#
using System; using System.Linq; class Program { static void Main( string [] args) { // Given array int [] arr = { 74, 91, 31, 122 }; int N = arr.Length; // Given string string S = "1AB" ; // Function call to modify // array by given operations ConvertArr(arr, N, S); Console.WriteLine(); } // Function to convert a decimal number // to its equivalent hexadecimal number static string DecHex( int n) { char [] alpha = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' }; string ans = "" ; while (n > 0) { if (n % 16 < 10) { ans += n % 16; } else { ans += alpha[n % 16 - 10]; } n /= 16; } return new string (ans.Reverse().ToArray()); } // Function to convert hexadecimal number // to its equavalent decimal number static int HexDec( string convertedHex) { // Stores characters with their // respective hexadecimal values char [] mp = { 'A' , 'B' , 'C' , 'D' , 'E' , 'F' }; // Stores answer int ans = 0; int pos = 0; // Traverse the string char [] reversed = convertedHex.Reverse().ToArray(); foreach ( char ch in reversed) { // If digit if ( char .IsDigit(ch)) { ans += ( int )Math.Pow(16, pos) * (ch - '0' ); } // If character else { ans += ( int )Math.Pow(16, pos) * Array.IndexOf(mp, ch); } pos += 1; } // Return the answer return ans; } // Function to move all the // alphabets to front static string RemoveChars( string hexaVal, string S) { char [] setk = S.ToCharArray(); string ans = "" ; foreach ( char ch in hexaVal) { 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, 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++) { Console.Write(arr[i] + " " ); } } } // This code is contributed by phasing17. |
Javascript
<script> // JavaScript program for the above approach // Function to convert a decimal number // to its equivalent hexadecimal number function decHex(n){ let alpha = [ 'A' , 'B' , 'C' , 'D' , 'E' , 'F' ] let ans = '' while (n){ if (n % 16 < 10) ans += (n % 16).toString() else ans += alpha[n % 16 - 10] n = Math.floor(n/16) } ans = ans.split( "" ).reverse().join( "" ) return ans } // Function to convert hexadecimal number // to its equavalent decimal {number function hexDec(convertedHex){ // Stores characters with their // respective hexadecimal values let mp = { "A" : 10, "B" : 11, "C" : 12, "D" : 13, "E" : 14, "F" : 15} // Stores answer let ans = 0 let pos = 0 // Traverse the string for (let i of convertedHex.split( "" ).reverse().join( "" )){ // If digit if (i.charCodeAt(0)>=48 && i.charCodeAt(0)<=57) ans += Math.pow(16,pos)*parseInt(i) // If character else ans += Math.pow(16,pos)*mp[i] pos += 1 } // Return the answer return ans } // Function to move all the // alphabets to front function removeChars(hexaVal, S){ let setk = new Set() for (let i of S) setk.add(i) let ans = '' for (let i of hexaVal){ if (setk.has(i)) 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 function convertArr(arr, S){ // Traverse the array for (let i=0;i<arr.length;i++){ // Stores hexadecimal value let hexaVal = decHex(arr[i]) // Remove the characters from hexadecimal // representation present in string S let convertedHex = removeChars(hexaVal, S) // Stores decimal value let decVal = hexDec(convertedHex) // Replace array element arr[i] = decVal } // Print the modified array document.write(arr, "</br>" ) } // Driver Code // Given array let arr = [74, 91, 31, 122] // Given string let S = "1AB" // Function call to modify // array by given operations convertArr(arr, S) // This code is contributed by shinjanpatra </script> |
[4, 5, 15, 7]
Time Complexity: O(N * |S|)
Auxiliary Space: O(|S|)
Ready to dive in? Explore our Free Demo Content and join our DSA course, trusted by over 100,000 neveropen!