ধরুন একটি স্ট্রিং আছে। সেই স্ট্রিংটিকে খুশি বলা হয় যদি সাবস্ট্রিং হিসাবে 'aa', 'bbb' বা 'ccc' এর মতো কোনও স্ট্রিং না থাকে। যদি আমাদের তিনটি পূর্ণসংখ্যা থাকে যেমন a, b এবং c, তাহলে যেকোনো স্ট্রিং s ফেরত দিন, যা নিম্নলিখিত শর্তগুলি পূরণ করে -
-
s সুখী এবং দীর্ঘতম সম্ভব৷
৷ -
s-এ সর্বাধিক 'a' অক্ষরের সংঘটন রয়েছে, সর্বাধিক b অক্ষরের 'b' এবং সর্বাধিক c অক্ষরের 'c' সংঘটন রয়েছে।
-
s-এ শুধুমাত্র 'a', 'b' এবং 'c' অক্ষর থাকবে।
যদি এমন কোন স্ট্রিং না থাকে, তাহলে একটি খালি স্ট্রিং ফেরত দিন।
সুতরাং, যদি ইনপুট হয় a =1, b =1, c =7, তাহলে আউটপুট হবে "ccaccbcc"
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
একটি ডেটা স্ট্রাকচার সংজ্ঞায়িত করুন যেখানে অক্ষর a, inx এবং cnt উপস্থিত রয়েছে
-
একটি অগ্রাধিকার সারি pq সংজ্ঞায়িত করুন, এটি ডেটার cnt মান ব্যবহার করে অগ্রাধিকার দেবে
-
a যদি অ-শূন্য হয়, তাহলে −
-
pq
-এ নতুন ডেটা('a', a, 0) সন্নিবেশ করান
-
-
যদি b অ-শূন্য হয়, তাহলে −
-
pq
-এ নতুন ডেটা ('b', b, 0) সন্নিবেশ করান
-
-
যদি c অ-শূন্য হয়, তাহলে −
-
pq
-এ নতুন ডেটা ('c', c, 0) সন্নিবেশ করান
-
-
idx :=1
-
ret :=ফাঁকা স্ট্রিং
-
সত্য যখন অ-শূন্য, কর −
-
temp :=pq এর শীর্ষ উপাদান
-
pq
থেকে উপাদান মুছুন -
যদি ret-এর আকার 0 না হয় এবং ret-এর শেষ উপাদানটি temp.a-এর মতো হয়, তাহলে −
-
যদি pq খালি হয়, তাহলে −
-
লুপ থেকে বেরিয়ে আসুন
-
-
x :=তাপমাত্রা
-
temp :=pq এর শীর্ষ উপাদান
-
pq
থেকে উপাদান মুছুন -
pq
-এ x ঢোকান
-
-
val :=0
-
যদি না হয় pq খালি এবং temp-এর cnt - pq <2 এর প্রথম উপাদানের cnt, তাহলে −
-
val :=1
-
-
অন্যথায়
-
val :=তাপমাত্রার সর্বনিম্ন cnt এবং 2
-
-
ret :=ret concatenate val index of temp.a থেকে val in end
-
temp.cnt :=temp.cnt - val
-
যদি pq খালি হয়, তাহলে −
-
লুপ থেকে বেরিয়ে আসুন
-
-
temp.idx :=idx
-
যদি temp.cnt> 0 হয়, তাহলে −
-
pq
-এ তাপমাত্রা সন্নিবেশ করান
-
-
(আইডিএক্স 1 দ্বারা বাড়ান)
-
-
রিটার্ন রিটার্ন
উদাহরণ
আরো ভালোভাবে বোঝার জন্য নিচের বাস্তবায়নটি দেখি -
#include <bits/stdc++.h> using namespace std; struct Data{ char a; int cnt; int idx ; Data(char c, int x, int k){ a = c; cnt = x; idx = k; } }; struct Cmp{ bool operator()(Data& a, Data& b) { return !(a.cnt>b.cnt); } }; class Solution { public: string longestDiverseString(int a, int b, int c) { priority_queue<Data, vector<Data>, Cmp> pq; if (a) pq.push(Data('a', a, 0)); if (b) pq.push(Data('b', b, 0)); if (c) pq.push(Data('c', c, 0)); int idx = 1; string ret = ""; while (true) { Data temp = pq.top(); pq.pop(); if (ret.size() && ret.back() == temp.a) { if (pq.empty()) break; Data x = temp; temp = pq.top(); pq.pop(); pq.push(x); } int val = 0; if (!pq.empty() && temp.cnt - pq.top().cnt < 2) { val = 1; } else val = min(temp.cnt, 2); ret += string(val, temp.a); temp.cnt -= val; if (pq.empty()) break; temp.idx = idx; if (temp.cnt > 0) pq.push(temp); idx++; } return ret; } }; main(){ Solution ob; cout << (ob.longestDiverseString(1,1,7)); }
ইনপুট
1,1,7
আউটপুট
ccbccacc