Skip to content
Related Articles

Related Articles

Improve Article

Sort a string according to the frequency of characters

  • Difficulty Level : Medium
  • Last Updated : 26 May, 2021
Geek Week

Given a string str, the task is to sort the string according to the frequency of each character, in ascending order. If two elements have the same frequency, then they are sorted in lexicographical order.
Examples: 

Input: str = “geeksforgeeks” 
Output: forggkksseeee 
Explanation: 
Frequency of characters: g2 e4 k2 s2 f1 o1 r1 
Sorted characters according to frequency: f1 o1 r1 g2 k2 s2 e4 
f, o, r occurs one time so they are ordered lexicographically and so are g, k and s. 
Hence the final output is forggkksseeee.
Input: str = “abc” 
Output: abc 

Approach The idea is to store each character with its frequency in a vector of pairs and then sort the vector pairs according to the frequency stored. Finally, print the vector in order.
Below is the implementation of the above approach:  

C++




// C++ implementation to Sort strings
// according to the frequency of
// characters in ascending order
 
#include <bits/stdc++.h>
using namespace std;
 
// Returns count of character in the string
int countFrequency(string str, char ch)
{
    int count = 0;
 
    for (int i = 0; i < str.length(); i++)
 
        // Check for vowel
        if (str[i] == ch)
            ++count;
 
    return count;
}
 
// Function to sort the string
// according to the frequency
void sortArr(string str)
{
    int n = str.length();
 
    // Vector to store the frequency of
    // characters with respective character
    vector<pair<int, char> > vp;
 
    // Inserting frequency
    // with respective character
    // in the vector pair
    for (int i = 0; i < n; i++) {
 
        vp.push_back(
            make_pair(
                countFrequency(str, str[i]),
                str[i]));
    }
 
    // Sort the vector, this will sort the pair
    // according to the number of characters
    sort(vp.begin(), vp.end());
 
    // Print the sorted vector content
    for (int i = 0; i < vp.size(); i++)
        cout << vp[i].second;
}
 
// Driver code
int main()
{
    string str = "geeksforgeeks";
 
    sortArr(str);
 
    return 0;
}

Python3




# Python3 implementation to Sort strings
# according to the frequency of
# characters in ascending order
 
# Returns count of character in the string
def countFrequency(string ,  ch) :
 
    count = 0;
 
    for i in range(len(string)) :
 
        # Check for vowel
        if (string[i] == ch) :
            count += 1;
 
    return count;
 
# Function to sort the string
# according to the frequency
def sortArr(string) :
    n = len(string);
 
    # Vector to store the frequency of
    # characters with respective character
    vp = [];
 
    # Inserting frequency
    # with respective character
    # in the vector pair
    for i in range(n) :
 
        vp.append((countFrequency(string, string[i]), string[i]));
         
    # Sort the vector, this will sort the pair
    # according to the number of characters
    vp.sort();
     
    # Print the sorted vector content
    for i in range(len(vp)) :
        print(vp[i][1],end="");
 
# Driver code
if __name__ == "__main__" :
 
    string = "geeksforgeeks";
 
    sortArr(string);
 
    # This code is contributed by Yash_R

Javascript




<script>
 
// JavaScript implementation of the above approach
 
// Returns count of character in the string
function countFrequency(str, ch)
{
    var count = 0;
 
    for (var i = 0; i < str.length; i++)
 
        // Check for vowel
        if (str[i] == ch)
            ++count;
 
    return count;
}
 
// Function to sort the string
// according to the frequency
function sortArr(str)
{
    var n = str.length;
 
    // Vector to store the frequency of
    // characters with respective character
    vp = new Array(n);
 
    // Inserting frequency
    // with respective character
    // in the vector pair
    for (var i = 0; i < n; i++) {
 
        vp[i] = [countFrequency(str, str[i]), str[i]];
    }
 
    // Sort the vector, this will sort the pair
    // according to the number of characters
    vp.sort();
 
    // Print the sorted vector content
    for (var i = 0; i < n; i++)
        document.write(vp[i][1]);
}
 
// Driver Code
 
// Array of points
let str = "geeksforgeeks";
sortArr(str);
 
</script>
Output: 
forggkksseeee

 

Time Complexity: O(n2)

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.  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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :