📌  相关文章
📜  通过从给定字符串中存在的十六进制表示中删除字符来修改数组

📅  最后修改于: 2021-04-17 14:42:33             🧑  作者: Mango

给定大小为N的数组arr []和字符串S ,任务是通过从S中存在的十六进制表示形式中删除所有字符,然后将等效的十进制元素替换回数组中,来修改给定的数组。

例子:

方法:请按照以下步骤解决问题:

  • 遍历数组arr []:
    • 将每个数组元素转换为其等效的十六进制值。
    • 除去从十六进制数,其存在于字符串S.中的字符
    • 将修改后的十六进制数字转换回其十进制表示形式。
    • 用它替换数组元素。
  • 打印修改后的数组。

下面是上述方法的实现:

C++
// C++ program for the above approach
#include 
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 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 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)


输出:
[4, 5, 15, 7]

时间复杂度: O(N * | S |)
辅助空间: O(| S |)