ধরুন আমাদের দুটি অ-খালি স্ট্রিং s এবং t আছে যা একই দৈর্ঘ্যের। আমাদের সেগুলিকে সাবস্ট্রিংগুলিতে ভাগ করতে হবে যাতে প্রতিটি জোড়া s এবং টি সাবস্ট্রিং একই আকারের হয় এবং তারা একে অপরের অ্যানাগ্রাম হয়। এখন কাটা সূচীগুলি এমনভাবে খুঁজুন যাতে এর ফলে s এবং t-এর সর্বাধিক সংখ্যক কাট হয়। যদি কোন ফলাফল না পাওয়া যায়, তাহলে খালি তালিকা ফেরত দিন।
সুতরাং, যদি ইনপুটটি s ="bowcattiger" t ="owbactietgr" এর মত হয়, তাহলে আউটপুট হবে [0, 3, 5, 6, 10], যেহেতু আমরা স্ট্রিংটিকে 5টি পার্টিশনে ভাগ করতে পারি যাতে প্রতিটি স্ট্রিং একটি একে অপরের anagram. s =["বো", "ca", "t", "tige", "r"], t =["owb", "ac", "t", "ietg", "r"]
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- ব্যবধান :=একটি নতুন তালিকা
- cs :=s এবং এর ফ্রিকোয়েন্সিতে উপস্থিত অক্ষর সহ একটি মানচিত্র
- ct :=টি এবং এর ফ্রিকোয়েন্সি অক্ষর সহ একটি মানচিত্র
- যদি cs ct এর মত না হয়, তাহলে
- একটি নতুন তালিকা ফেরত দিন
s - 1 থেকে 0 এর রেঞ্জের আকারে x-এর জন্য, - cs[s[x]] :=cs[s[x]] - 1
- ct[t[x]] :=ct[t[x]] - 1
- যদি cs ct এর মত হয়, তাহলে
- ব্যবধানের শেষে x ঢোকান
- তালিকা ব্যবধান বাছাই করুন এবং ফিরে আসুন
- করুন
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
from collections import Counter class Solution: def solve(self, a, b): intervals = [] ca = Counter(a) cb = Counter(b) if ca != cb: return [] for x in reversed(range(len(a))): ca[a[x]] -= 1 cb[b[x]] -= 1 if ca == cb: intervals.append(x) return sorted(intervals) ob = Solution() s = "bowcattiger" t = "owbactietgr" print(ob.solve(s, t))
ইনপুট
"bowcattiger", "owbactietgr"
আউটপুট
[0, 3, 5, 6, 10]