Sort Characters By Frequency in C++


Suppose we have a string, we have to sort the characters based on the frequency. So if the string is like “abbbacbcc”, then the output will be “bbbbcccaa”

To solve this, we will follow these steps −

  • create an array of pairs called v, create one map m
  • for all characters in string,
    • increase value of m[character] by 1
  • i := first element of map
  • while map has elements
    • insert (i.second, i.first) into v
    • and increase i to point to the next element
  • sort the vector v
  • ans := an empty string
  • for i := 0 to size of v
    • t := first element of v[i]
    • while t is not 0
      • ans := ans + second part of v[i]
      • decrease t by 1
  • return ans

Example

Let us see the following implementation to get a better understanding −

 Live Demo

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   static bool cmp(pair <int, char> a, pair <int, char> b){
      return a.first < b.first;
   }
   string frequencySort(string s) {
      vector < pair <int, char> > v;
      map <char, int> m;
      for(int i = 0; i < s.size(); i++){
         m[s[i]]++;
      }
      map <char, int> :: iterator i = m.begin();
      while(i != m.end()){
         v.push_back({i->second, i->first});
         i++;
      }
      sort(v.rbegin(), v.rend(), cmp);
      string ans = "";
      for(int i = 0; i < v.size(); i++){
         int t = v[i].first;
         while(t--)ans += v[i].second;
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.frequencySort("abbbacbcc");
}

Input

"abbbacbcc"

Output

bbbbcccaa

Updated on: 28-Apr-2020

1K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements