এই সমস্যায় একটি স্ট্রিং দেওয়া থাকলে, ক্যারেক্টারগুলো ফ্রিকোয়েন্সি অনুযায়ী ডিসেন্ডিং অর্ডারে সর্ট করতে হবে।
উদাহরণ: "abbbacbcc" -> আউটপুট "bbbbcccaa"।
সমাধানের পদ্ধতি
- ফ্রিকোয়েন্সি কাউন্ট করুন (
unordered_map)। - পেয়ার
(freq, char)ভেক্টরে রাখুন। - কাস্টম কমপেরেটর দিয়ে সর্ট করুন: ফ্রিকোয়েন্সি ডিসেন্ডিং, টাই হলে ক্যারেক্টার অ্যাসেন্ডিং (অথবা যেকোনো ক্রম, সমস্যা নির্দিষ্ট করেনি)।
- সর্টেড ভেক্টর অনুযায়ী স্ট্রিং বানান।
উদাহরণ (C++)
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
static bool cmp(const pair<int, char>& a, const pair<int, char>& b) {
if (a.first != b.first) return a.first > b.first; // freq descending
return a.second < b.second; // char ascending for tie-break
}
string frequencySort(string s) {
unordered_map<char, int> freq;
for (char c : s) freq[c]++;
vector<pair<int, char>> v;
for (auto& p : freq) v.push_back({p.second, p.first});
sort(v.begin(), v.end(), cmp);
string ans;
for (auto& p : v) ans.append(p.first, p.second);
return ans;
}
};
int main() {
Solution ob;
cout << ob.frequencySort("abbbacbcc") << endl;
return 0;
}
ইনপুট
"abbbacbcc"
আউটপুট
bbbbcccaa