ধরুন, দুটি লোয়ারকেস স্ট্রিং s এবং t দেওয়া হয়েছে। আমাদের যাচাই করতে হবে যে t কি s-থেকে নিচের কনস্ট্রেইন্টস মেনে তৈরি করা যায়:
t-এর ক্যারেক্টারগুলোs-এ থাকতে হবে (ফ্রিকোয়েন্সি মিলতে হবে)।- যদি
t-এর কোনো ক্যারেক্টারs-এ না থাকে, তবে তার আগের দুইটি ASCII ক্যারেক্টার (যেমন 'f' না থাকলে 'd' এবং 'e')s-থেকে ব্যবহার করে সেটি বানানো যাবে।
যেমন, ইনপুট s = "pghn", t = "pin" হলে আউটপুট হবে True, কারণ 'i' s-এ নেই, কিন্তু এর আগের দুটি 'g' এবং 'h' আছে, তাই 'i' বানানো যায়।
সমাধানের ধাপসমূহ
s-এর ক্যারেক্টার ফ্রিকোয়েন্সিfreqডিকশনারিতে রাখুন।t-এর প্রতিটি ক্যারেক্টারchএর জন্য:- যদি
freq[ch] > 0হয়, তবে এক কমান। - অন্যথায় যদি
freq[chr(ord(ch)-1)] > 0এবংfreq[chr(ord(ch)-2)] > 0হয়, তবে দুটোর ফ্রিকোয়েন্সি এক এক কমান। - অন্যথায় False ফেরত দিন।
- যদি
- লুপ শেষ হলে True ফেরত দিন।
উদাহরণ কোড
from collections import defaultdict
def solve(s, t):
freq = defaultdict(lambda: 0)
for ch in s:
freq[ch] += 1
for ch in t:
if freq[ch]:
freq[ch] -= 1
elif freq[chr(ord(ch) - 1)] and freq[chr(ord(ch) - 2)]:
freq[chr(ord(ch) - 1)] -= 1
freq[chr(ord(ch) - 2)] -= 1
else:
return False
return True
s = "pghn"
t = "pin"
print(solve(s, t))
ইনপুট
"pghn", "pin"
আউটপুট
True