मान लीजिए कि हमारे पास एक स्ट्रिंग है, हमें आवृत्ति के आधार पर वर्णों को क्रमबद्ध करना होगा। तो अगर स्ट्रिंग "abbbacbcc" की तरह है, तो आउटपुट "bbbbcccaa" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- v नामक जोड़े की एक सरणी बनाएं, एक नक्शा बनाएं m
- स्ट्रिंग में सभी वर्णों के लिए,
- m[character] के मान में 1 की वृद्धि
- i :=मानचित्र का पहला तत्व
- जबकि मानचित्र में तत्व हैं
- v में डालें (i.second, i.first)
- और अगले तत्व को इंगित करने के लिए i बढ़ाएँ
- वेक्टर v को सॉर्ट करें
- उत्तर:=एक खाली स्ट्रिंग
- i :=0 से v के आकार के लिए
- t:=v[i] का पहला तत्व
- जबकि t 0 नहीं है
- Ans :=ans + v[i] का दूसरा भाग
- टी को 1 से घटाएं
- वापसी उत्तर
उदाहरण
एक बेहतर समझ प्राप्त करने के लिए आइए निम्नलिखित कार्यान्वयन को देखें -
#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"); }
इनपुट
"abbbacbcc"
आउटपुट
bbbbcccaa