মনে করুন s একটি স্ট্রিং। যেসব ডুপ্লিকেট ক্যারেক্টার আগে আস चुका সেগুলো সরিয়ে দিতে হবে। ফাইনাল স্ট্রিং 본래 ক্রম ধরে রাখবে।
অর্ডার্ড ডিকশনারি ব্যবহার করে সমাধান করা যায় যাতে ক্যারেক্টারগুলোর ইনসারশন অর্ডার বজায় থাকে। ভ্যালু হবে ফ্রিকোয়েন্সি, তবে এখানে ফ্রিকোয়েন্সি গুরুত্বপূর্ণ নয়। ডিকশনারি বানালে কিজগুলো জোড়া দিয়ে আউটপুট স্ট্রিং পাওয়া যায়।
ইনপুট s = "bbabcaaccdbaabababc" হলে আউটপুট হবে "bacd"।
- d := একটি ডিকশনারি যেখানে কিজ ইনসারশন অর্ডার অনুযায়ী সংরক্ষিত থাকে
- s-এ প্রতিটি ক্যারেক্টার c-এর জন্য:
- যদি c d-এ নেই: d[c] := 0
- d[c] := d[c] + 1
- কিজগুলো ক্রমে জোড়া দিয়ে আউটপুট স্ট্রিং বানিয়ে ফেরত দিন।
উদাহরণ
বাস্তবায়ন:
from collections import OrderedDict
def solve(s):
d = OrderedDict()
for c in s:
if c not in d:
d[c] = 0
d[c] += 1
return ''.join(d.keys())
s = "bbabcaaccdbaabababc"
print(solve(s))
ইনপুট
"bbabcaaccdbaabababc"
আউটপুট
"bacd"