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

C++-এ কাস্টম সর্ট স্ট্রিং


দুটি স্ট্রিং S আর T দেওয়া আছে, যেগুলো ছোট হাতের অক্ষরlerden বনেছে। S-এ কোনো অক্ষর একবারের বেশি আসে না। S কাস্টম অর্ডারে সোর্ট করা আছে। T-এর অক্ষরগুলোকেও সে কাস্টম অর্ডার অনুযায়ী পারমিউট করতে হবে। স্পষ্টভাবে, যদি S-এ x, y-র আগে থাকে, তবে ফলাফলেও x, y-র আগে থাকবে।

উদাহরণ: S = "cba", T = "abcd" হলে আউটপুট "cbad"। এখানে a,b,c S-এ আছে, তাই তাদের অর্ডার হবে c, b, a। d S-এ নেই, তাই কোথাও থাকতে পারে। "dcba", "cdba", "cbda" — সবই বৈধ।

সমাধানের ধাপগুলো:

  • ret খালি স্ট্রিং হিসেবে সেট করুন।
  • m নামের একটি ম্যাপে T-এর প্রতিটি ক্যারেক্টারের ফ্রিকোয়েন্সি স্টোর করুন।
  • i = 0 থেকে S.size()-1 পর্যন্ত:
    • x := S[i]
    • j = 0 থেকে m[x]-1 পর্যন্ত: ret := ret + x
    • m[x] := 0
  • m-এর প্রতিটি পেয়ার it এর জন্য:
    • যদি it.value > 0:
      • i = 0 থেকে it.value-1 পর্যন্ত: ret := ret + it.key
  • ret ফেরত দিন।

উদাহরণ (C++)

#include <bits/stdc++.h> using namespace std; class Solution {    public:    string customSortString(string S, string T) {       string ret = "";       unordered_map <char, int> m;       for(int i = 0; i < T.size(); i++){          m[T[i]]++;       }       for(int i = 0; i < S.size(); i++){          char x = S[i];          for(int j = 0; j < m[x]; j++){             ret += x;          }          m[x] = 0;       }       unordered_map <char, int> :: iterator it = m.begin();       while(it != m.end()){          if(it->second > 0){             for(int i = 0; i < it->second; i++)ret += it->first;          }          it++;       }       return ret;    } }; main(){    Solution ob;    cout << (ob.customSortString("cba", "abcd")); }

ইনপুট

"cba" "abcd"

আউটপুট

cbad

  1. C++-এ অল্টারনেট লোয়ার-আপার কেস স্ট্রিং সর্ট

  2. C++-এ স্ট্রিং টোকেনাইজেশন: স্ট্রিম এবং getline() ব্যবহার

  3. C++-এ স্ট্রিং টোকেনাইজ (Tokenize) করা

  4. পাইথনে কাস্টম অর্ডারে স্ট্রিং সর্ট করার প্রোগ্রাম