দুটি স্ট্রিং 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 + xm[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