Open In App

Make alphabets using the elements of an array

Improve
Improve
Like Article
Like
Save
Share
Report

Given an array of positive integers, find all the alphabets that we can make using elements of the array. 

Examples : 

Input : arr[] = {6, 5}
Output : A
In this example, we can take 6 and 5
as 65 that gives us A.

Input : arr[] = {5, 6, 6}
Output : A B
Here we can take 6 and 5 as 65 to make A. 
And 6 and 6 as 66 to make B.

Input : arr[] = {1, 0, 1, 0}
Output: d e n
Here we can take 1, 0 and 0 as 100 to make d.
1, 0 and 1 as 101 to make e. And 
1, 1, and 0 as 110 to make n.

Approach: The approach is to iterate a loop from char A to Z and check whether both the digits of their ASCII values (ASCII value of A is 65 and digits of ASCII value for A is 6 and 5) exist in the array or not. For this, we have to calculate frequency of each element of the array. Same as for small alphabets.

Below is the implementation of the above approach. 

C++




// CPP program to find all the capital characters
// we can make from the given array.
#include <bits/stdc++.h>
using namespace std;
 
// Function returns all the capital characters
//  we can make.
string findCharacters(int arr[], int n)
{
    string ans = "";
    int brr[10] = { 0 };
 
    // Calculating the frequency of the elements.
    for (int i = 0; i < n; i++)
        brr[arr[i]]++;
 
    // Checking for capital alphabets.
    for (char ch = 'A'; ch <= 'Z'; ch++)
    {
 
        // Storing one digit in x and other in y.
        int x = ch / 10;
        int y = ch % 10;
        brr[x]--;
        brr[y]--;
 
        // If both the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
    }
 
    // Checking for alphabets a, b and c.
    for (char ch = 'a'; ch <= 'c'; ch++)
    {
        int x = ch / 10;
        int y = ch % 10;
        brr[x]--;
        brr[y]--;
 
        // If all the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
    }
 
    // Checking for d to z.
    for (char ch = 'd'; ch <= 'z'; ch++)
    {
        int x = (ch / 10) / 10;
        int y = (ch / 10) % 10;
        int z = ch % 10;
        brr[x]--;
        brr[y]--;
        brr[z]--;
 
        // If all the digits exist.
        if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
        {
 
            // Putting in the result
            ans += ch;
            ans += ' ';
        }
        brr[x]++;
        brr[y]++;
        brr[z]++;
    }
 
    return ans;
}
 
// Driver function
int main()
{
    int arr[] = { 5, 6, 6 }, n;
    n = sizeof(arr) / sizeof(arr[0]);
    cout << findCharacters(arr, n) << endl;
}


Java




// Java program to find all the capital characters
// we can make from the given array.
import java.util.*;
import java.lang.*;
 
public class GeeksforGeeks
{
 
    // Function returns all the capital characters we can make.
    public static String findCharacters(int arr[], int n)
    {
        String ans = "";
        int[] brr = new int[10];
 
        // Calculating the frequency of the elements.
        for (int i = 0; i < n; i++)
            brr[arr[i]]++;
 
        for (char ch = 'A'; ch <= 'Z'; ch++)
        {
 
            // Storing one digit in x and other in y.
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for alphabets a, b and c.
        for (char ch = 'a'; ch <= 'c'; ch++)
        {
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for d to z.
        for (char ch = 'd'; ch <= 'z'; ch++)
        {
            int x = (ch / 10) / 10;
            int y = (ch / 10) % 10;
            int z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
 
        return ans;
    }
 
    // Driver function
    public static void main(String argc[])
    {
        int arr[] = { 5, 6, 6 }, n;
        n = 3;
        System.out.println(findCharacters(arr, n));
    }
}


Python




# Python3 program to find all the capital characters
# we can make from the given array.
 
# Function returns all the capital characters
# we can make.
def findCharacters(arr, n):
    ans = ""
    brr = [0] * 10
 
    # Calculating the frequency of the elements.
    for i in range(n):
        brr[arr[i]] += 1
 
    # Checking for capital alphabets.
    for ch in range(ord('A'), ord('Z') + 1):
 
        # Storing one digit in x and other in y.
        x = ch // 10
        y = ch % 10
        brr[x] -= 1
        brr[y] -= 1
 
        # If both the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
 
    # Checking for alphabets a, b and c.
    for ch in range(ord('a'), ord('c') + 1):
        x = ch // 10
        y = ch % 10
        brr[x] -= 1
        brr[y] -= 1
 
        # If all the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
 
    # Checking for d to z.
    for ch in range(ord('d'), ord('z') + 1):
        x = (ch // 10) // 10
        y = (ch // 10) % 10
        z = ch % 10
        brr[x] -= 1
        brr[y] -= 1
        brr[z] -= 1
 
        # If all the digits exist.
        if (brr[x] >= 0 and brr[y] >= 0 and brr[z] >= 0):
 
            # Putting in the result
            ans += chr(ch)
            ans += ' '
        brr[x] += 1
        brr[y] += 1
        brr[z] += 1
 
    return ans
 
# Driver function
arr = [5, 6, 6]
n = len(arr)
print(findCharacters(arr, n))
 
# This code is contributed by mohit kumar 29


C#




// C# program to find all the capital
// characters we can make from the given array.
using System;
 
class GeeksforGeeks
{
    // Function returns all the capital
    // characters we can make.
    public static String findCharacters(int []arr, int n )
    {
        String ans = "";
        int []brr = new int[10];
 
        // Calculating the frequency of the elements.
        for (int i = 0; i < n; i++)
            brr[arr[i]]++;
 
        for (char ch = 'A'; ch <= 'Z'; ch++)
        {
            // Storing one digit in x and other in y.
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for alphabets a, b and c.
        for (char ch = 'a'; ch <= 'c'; ch++)
        {
            int x = ch / 10;
            int y = ch % 10;
            brr[x]--;
            brr[y]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
 
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
 
        // Checking for d to z.
        for (char ch = 'd'; ch <= 'z'; ch++)
        {
            int x = (ch / 10) / 10;
            int y = (ch / 10) % 10;
            int z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
 
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 && brr[z] >= 0)
            {
                // Putting in the result
                ans += ch;
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
 
        return ans;
    }
 
    // Driver function
    public static void Main()
    {
        int []arr = {5, 6, 6};
        int n = 3;
        Console.Write(findCharacters(arr, n));
    }
}
 
// This code is contributed by nitin mittal.


Javascript




<script>
 
// JavaScript program to find
// all the capital characters
// we can make from the given array.
     
    // Function returns all the capital
    // characters we can make.
    function findCharacters(arr,n)
    {
        let ans = "";
        let brr = new Array(10);
        for(let i=0;i<brr.length;i++)
        {
            brr[i]=0;
        }
   
        // Calculating the frequency of the elements.
        for (let i = 0; i < n; i++)
            brr[arr[i]]++;
   
        for (let ch = 'A'.charCodeAt(0);
        ch <= 'Z'.charCodeAt(0); ch++)
        {
   
            // Storing one digit in x and other in y.
            let x = Math.floor(ch / 10);
            let y = ch % 10;
            brr[x]--;
            brr[y]--;
   
            // If both the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
   
        // Checking for alphabets a, b and c.
        for (let ch = 'a'.charCodeAt(0);
        ch <= 'c'.charCodeAt(0); ch++)
        {
            let x = Math.floor(ch / 10);
            let y = ch % 10;
            brr[x]--;
            brr[y]--;
   
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
        }
   
        // Checking for d to z.
        for (let ch = 'd'.charCodeAt(0);
        ch <= 'z'.charCodeAt(0); ch++)
        {
            let x = Math.floor((ch / 10) / 10);
            let y = (ch / 10) % 10;
            let z = ch % 10;
            brr[x]--;
            brr[y]--;
            brr[z]--;
   
            // If all the digits exist.
            if (brr[x] >= 0 && brr[y] >= 0 &&
            brr[z] >= 0)
            {
   
                // Putting in the result
                ans += String.fromCharCode(ch);
                ans += ' ';
            }
            brr[x]++;
            brr[y]++;
            brr[z]++;
        }
   
        return ans;
    }
     
    // Driver function
    let arr=[5, 6, 6 ];
    let n = 3;
    document.write(findCharacters(arr, n));
     
 
// This code is contributed by patel2127
 
</script>


Output

A B 

Time Complexity: O(n)



Last Updated : 27 Jul, 2022
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads