# Generate a Number in Decreasing order of Frequencies of characters of a given String

Given a string Str of length N, consisting of lowercase alphabets, the task is to generate a number in decreasing order of the frequency of characters in the given string. If two characters have the same frequency, the character with a smaller ASCII value appears first. Numbers assigned to characters {a, b, …., y, z} are {1, 2, …., 25, 26} respectively.
Note: For characters having values greater than 9 assigned to it, take its modulo 10.
Examples:

Input: N = 6, Str = “aaabbd”
Output: 124
Explanation:
Given characters and their respective frequencies are:

• a = 3
• b = 2
• d = 1

Since the number needs to be generated in increasing order of their frequencies, the final generated number is 124.
Input: N = 6, Str = “akkzzz”
Output: 611
Explanation:
Given characters and their respective frequencies are:

• a = 1
• k = 2
• z = 3

For z, value to assigned = 26
Hence, the corresponding digit assigned = 26 % 10 = 6
For k, value to assigned = 11
Hence, the corresponding digit assigned = 11 % 10 = 1
Since the number needs to be generated in increasing order of their frequencies, the final generated number is 611

Approach:
Follow the steps below to solve the problem:

• Initialize a Map and store the frequencies of each character.
• Traverse the Map and insert all {Character, Frequency} pairs in a vector of pair.
• Sort this vector in a way such that the pair with higher frequency appears first and among pairs having the same frequency, those with smaller ASCII value come first.
• Traverse this vector and find the digit corresponding to each character.
• Print the final number generated.

Below is the implementation of the above approach:

 `// C++ Program to implement` `// the above approach` `#include ` `using` `namespace` `std;`   `// Custom comparator for sorting` `bool` `comp(pair<``char``, ``int``>& p1,` `          ``pair<``char``, ``int``>& p2)` `{`   `    ``// If frequency is same` `    ``if` `(p1.second == p2.second)`   `        ``// Character with lower ASCII` `        ``// value appears first` `        ``return` `p1.first < p2.first;`   `    ``// Otherwise character with higher` `    ``// frequency appears first` `    ``return` `p1.second > p2.second;` `}`   `// Function to sort map accordingly` `string sort(map<``char``, ``int``>& m)` `{`   `    ``// Declaring vector of pairs` `    ``vector > a;`   `    ``// Output string to store the result` `    ``string out;`   `    ``// Traversing map and pushing` `    ``// pairs to vector` `    ``for` `(``auto` `x : m) {`   `        ``a.push_back({ x.first, x.second });` `    ``}`   `    ``// Using custom comparator` `    ``sort(a.begin(), a.end(), comp);`   `    ``// Traversing the Vector` `    ``for` `(``auto` `x : a) {`   `        ``// Get the possible digit` `        ``// from assigned value` `        ``int` `k = x.first - ``'a'` `+ 1;`   `        ``// Ensures k does not exceed 9` `        ``k = k % 10;`   `        ``// Apppend each digit` `        ``out = out + to_string(k);` `    ``}`   `    ``// Returning final result` `    ``return` `out;` `}`   `// Function to generate and return` `// the required number` `string formString(string s)` `{` `    ``// Stores the frequencies` `    ``map<``char``, ``int``> mp;`   `    ``for` `(``int` `i = 0; i < s.length(); i++)` `        ``mp[s[i]]++;`   `    ``// Sort map in required order` `    ``string res = sort(mp);`   `    ``// Return the final result` `    ``return` `res;` `}`   `// Driver Code` `int` `main()` `{` `    ``int` `N = 4;`   `    ``string Str = ``"akkzzz"``;`   `    ``cout << formString(Str);`   `    ``return` `0;` `}`

 `# Python3 Program to implement ` `# the above approach`   `# Function to sort map ` `# accordingly` `def` `sort(m):`   `    ``# Declaring vector ` `    ``# of pairs` `    ``a ``=` `{}`   `    ``# Output string to ` `    ``# store the result` `    ``out ``=` `""`   `    ``# Traversing map and` `    ``# pushing pairs to vector` `    ``for` `x ``in` `m:` `        ``a[x] ``=` `[]`   `        ``a[x].append(m[x])`   `    ``# Character with lower ASCII ` `    ``# value appears first` `    ``a ``=` `dict``(``sorted``(a.items(), ` `                  ``key ``=` `lambda` `x : x[``0``]))`   `    ``# Character with higher ` `    ``# frequency appears first ` `    ``a ``=` `dict``(``sorted``(a.items(), ` `                    ``reverse ``=` `True``, ` `                    ``key ``=` `lambda` `x : x[``1``]))`   `    ``# Traversing the Vector` `    ``for` `x ``in` `a:`   `        ``# Get the possible digit ` `        ``# from assigned value` `        ``k ``=` `ord``(x[``0``]) ``-` `ord``(``'a'``) ``+` `1`   `        ``# Ensures k does ` `        ``# not exceed 9` `        ``k ``=` `k ``%` `10`   `        ``# Apppend each digit` `        ``out ``=` `out ``+` `str``(k)`   `    ``# Returning final result` `    ``return` `out`   `# Function to generate and return ` `# the required number` `def` `formString(s):`   `    ``# Stores the frequencies` `    ``mp ``=` `{}` `    ``for` `i ``in` `range``(``len``(s)):` `        ``if` `s[i] ``in` `mp:` `            ``mp[s[i]] ``+``=` `1` `        ``else``:` `            ``mp[s[i]] ``=` `1`   `    ``# Sort map in ` `    ``# required order` `    ``res ``=` `sort(mp)`   `    ``# Return the ` `    ``# final result` `    ``return` `res`   `# Driver Code ` `N ``=` `4` `Str` `=` `"akkzzz"` `print``(formString(``Str``))`   `# This code is contributed by avanitrachhadiya2155`

Output:
```611

```

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

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.

Learn to Code A beginner in field of coding

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.