ধরুন আমাদের দুটি স্ট্রিং আছে, s এবং t, আমাদের পরীক্ষা করতে হবে s এবং t কাছাকাছি কিনা। আমরা বলতে পারি দুটি স্ট্রিং কাছাকাছি যদি আমরা নিম্নলিখিত ক্রিয়াকলাপগুলি ব্যবহার করে অন্যটি থেকে একটি অর্জন করতে পারি -
-
যেকোনো দুটি বিদ্যমান অক্ষর বিনিময় করুন। (যেমন abcde থেকে aecdb)
-
একটি বিদ্যমান অক্ষরের প্রতিটি ঘটনাকে অন্য বিদ্যমান অক্ষরে পরিবর্তন করুন এবং অন্যান্য অক্ষরের সাথেও একই কাজ করুন। (যেমন aacabb -> bbcbaa (এখানে সব a-কে b-এ রূপান্তরিত করা হয় এবং এর বিপরীতে))
আমরা উভয় স্ট্রিং-এ যতবার চাই ততবার অপারেশন ব্যবহার করতে পারি।
সুতরাং, যদি ইনপুটটি s ="zxyyyx", t ="xyyzzz" এর মতো হয়, তাহলে আউটপুটটি সত্য হবে, কারণ আমরা 3টি অপারেশনে s থেকে t পেতে পারি। ("zxyyyx" -> "zxxyyy"), ("zxxyyy" -> "yxxzzz"), এবং ("yxxzzz" -> "xyyzzz")।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
-
যদি s এবং t কোন অস্বাভাবিক অক্ষর থাকে, তাহলে
-
রিটার্ন ফলস
-
-
a :=s
-এ অক্ষরের সমস্ত ফ্রিকোয়েন্সি মানের তালিকা -
b :=t
-এ অক্ষরের সমস্ত ফ্রিকোয়েন্সি মানের তালিকা -
তালিকাটি একটি
সাজান -
তালিকা b
সাজান -
a যদি b এর মত না হয়, তাহলে
-
রিটার্ন ফলস
-
-
রিটার্ন ট্রু
উদাহরণ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
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