ধরুন আমাদের কাছে A নামক স্ট্রিংগুলির একটি অ্যারে আছে। S-এর দিকে এক সরে গেলে S-এর যেকোনো দুটি জোড় সূচীকৃত অক্ষর বা S-এর যেকোনো দুটি বিজোড় সূচীকৃত অক্ষর অদলবদল করা হয়।
এখন, দুটি স্ট্রিং S এবং T বিশেষ-সমতুল্য যদি S-এর দিকে যেকোন সংখ্যক সরে যাওয়ার পরে, S T-এর মতো হয়। সুতরাং, যদি S ="zzxy" এবং T ="xyzz" বিশেষ-সমতুল হয় কারণ আমরা চালনা করতে পারি যেমন "zzxy" থেকে "xzzy" থেকে "xyzz" যা S[0] এবং S[2], তারপর S[1] এবং S[3] অদলবদল করে।
এখন, A থেকে বিশেষ-সমতুল্য স্ট্রিংগুলির একটি গ্রুপ হল A এর একটি অ-খালি উপসেট যা −
গ্রুপের প্রতিটি জোড়ায় স্ট্রিং বিশেষ সমতুল্য, এবং গ্রুপটি সবচেয়ে বড় আকারের সম্ভাব্য (কোনও স্ট্রিং S গ্রুপে নেই যেমন S সেই গ্রুপের প্রতিটি স্ট্রিংয়ের জন্য বিশেষ সমতুল্য) আমাদের সংখ্যা খুঁজে বের করতে হবে A.
থেকে বিশেষ-সমতুল্য স্ট্রিংগুলির গ্রুপসুতরাং, যদি ইনপুটটি ["abcd","cdab","cbad","xyzz","zzxy","zzyx"] এর মত হয়, তাহলে আউটপুট হবে 3, যেমন একটি গ্রুপ ["abcd", " cdab", "cbad"], যেহেতু এগুলি সব জোড়া বিশেষ সমতুল্য, এবং অন্যান্য স্ট্রিংগুলির মধ্যে কোনটিই এইগুলির সমতুল্য বিশেষ সমতুল্য নয়। এছাড়াও আরও দুটি দল রয়েছে। এগুলো হল ["xyzz", "zzxy"] এবং ["zzyx"]।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- কোড :=একটি নতুন সেট
- A-এর প্রতিটি শব্দের জন্য করুন
- কোড :=জোড় অবস্থান সূচক সহ দুটি স্ট্রিং এবং বিজোড় অবস্থান সূচক সহ আরেকটি স্ট্রিং সংযুক্ত করুন
- কোডগুলিতে কোড যোগ করুন
- কোডের রিটার্ন সাইজ
আরো ভালোভাবে বোঝার জন্য আসুন নিচের বাস্তবায়ন দেখি -
উদাহরণ
class Solution: def numSpecialEquivGroups(self, A): codes = set() for word in A: code = ''.join(sorted(word[::2])) +''.join(sorted(word[1::2])) codes.add(code) return len(codes) ob = Solution() print(ob.numSpecialEquivGroups(["abcd","cdab","cbad","xyzz","zzxy","z zyx"]))
ইনপুট
["abcd","cdab","cbad","xyzz","zzxy","zzyx"]
আউটপুট
3