মান লিজিয়ে আমাদের দুটি স্ট্রিং আছে s এবং t, আমাদের চেক করতে হবে সেগুলো close কিনা। দুটি স্ট্রিং close বলা হয় যদি নিচের অপারেশনগুলো ব্যবহার করে একটিকে অন্যটিতে রূপান্তর করা যায়:
যেকোনো দুটি এক্সিস্টিং ক্যারেক্টার এক্সচেঞ্জ করুন। (যেমন
abcdeথেকেaecdb)একটি এক্সিস্টিং ক্যারেক্টারের সকল অকুরেন্স কে অন্য এক্সিস্টিং ক্যারেক্টারে কনভার্ট করুন, এবং অন্যটিও একইভাবে করুন। (যেমন
aacabb -> bbcbaaএখানে সব 'a' হল 'b' এবং সব 'b' হল 'a')
অপারেশনগুলো যেকোনো স্ট্রিংয়ে যেকোনো সংখ্যকবার ব্যবহার করা যায়।
যেমন, ইনপুট হলে s = "zxyyyx", t = "xyyzzz", তবে আউটপুট হবে true, কারণ ৩ অপারেশন দিয়ে s-থেকে t পাওয়া যায়: ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz"), ("yxxzzz" -> "xyyzzz")।
সমাধানের ধাপসমূহ
যদি
sএবংt-এ কোনো আনকমন ক্যারেক্টার থাকে, তবেFalseরিটার্ন করুন।a := s-এর ক্যারেক্টার ফ্রিকোয়েন্সি ভ্যালুগুলো থেকে বানানো লিস্টb := t-এর ক্যারেক্টার ফ্রিকোয়েন্সি ভ্যালুগুলো থেকে বানানো লিস্টaএবংbসর্ট করুন।যদি
a != bহয়, তবেFalseরিটার্ন করুন।Trueরিটার্ন করুন।
উদাহরণ
নিচের ইমপ্লিমেন্টেশনটি দেখুন:
from collections import Counter
def solve(s, t):
if set(s) != set(t):
return False
a = list(Counter(s).values())
b = list(Counter(t).values())
a.sort()
b.sort()
if a != b:
return False
return True
s = "zxyyyx"
t = "xyyzzz"
print(solve(s, t))ইনপুট
"zxyyyx", "xyyzzz"
আউটপুট
True