কম্পিউটার টিউটোরিয়াল

C++-এ Sort Characters By Frequency

এই সমস্যায় একটি স্ট্রিং দেওয়া থাকলে, ক্যারেক্টারগুলো ফ্রিকোয়েন্সি অনুযায়ী ডিসেন্ডিং অর্ডারে সর্ট করতে হবে।

উদাহরণ: "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
  1. 3-ওয়ে মার্জ সোর্ট (3-way Merge Sort) C++-এ

  2. C++-এ getline (string) ফাংশন

  3. C++-এ স্ট্র্যান্ড সর্ট (Strand Sort)

  4. C++-এ ট্রাইগ্রাফ (Trigraphs)