मान लीजिए कि हमारे पास ए नामक स्ट्रिंग्स की एक सरणी है। एस पर एक कदम में एस के किसी भी दो अनुक्रमित वर्णों या एस के दो विषम अनुक्रमित वर्णों की अदला-बदली होती है।
अब, दो तार S और T विशेष-समतुल्य हैं यदि S पर किसी भी चाल के बाद, S, T के समान है। इसलिए, यदि S ="zzxy" और T ="xyzz" विशेष-समतुल्य हैं क्योंकि हम चालें चल सकते हैं जैसे "zzxy" से "xzzy" से "xyzz" जो S[0] और S[2], फिर S[1] और S[3] को स्वैप करते हैं।
अब, A से विशेष-समतुल्य स्ट्रिंग्स का एक समूह, A का एक गैर-रिक्त उपसमुच्चय इस प्रकार है कि -
समूह में स्ट्रिंग्स की प्रत्येक जोड़ी में विशेष समकक्ष हैं, और समूह सबसे बड़ा आकार संभव है (समूह में कोई स्ट्रिंग एस नहीं है जैसे कि एस उस समूह में प्रत्येक स्ट्रिंग के लिए विशेष समकक्ष है) हमें संख्या ज्ञात करनी है A.
. से विशेष-समतुल्य तारों के समूहइसलिए, यदि इनपुट ["abcd",,"cdab",,"cbad",,"xyzz",,"zzxy",,"zzyx"] जैसा है, तो आउटपुट 3 होगा, क्योंकि एक समूह ["abcd", " cdab", "cbad"], क्योंकि वे सभी जोड़ीवार विशेष समकक्ष हैं, और अन्य कोई भी स्ट्रिंग इनके लिए सभी जोड़ीदार विशेष समकक्ष नहीं हैं। दो अन्य समूह भी हैं। ये ["xyzz", "zzxy"] और ["zzyx"] हैं।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- कोड:=एक नया सेट
- ए में प्रत्येक शब्द के लिए, करें
- कोड:=दो स्ट्रिंग्स को सम स्थिति सूचकांकों के साथ और दूसरी स्ट्रिंग को विषम स्थिति सूचकांकों के साथ संयोजित करें
- कोड में कोड जोड़ें
- कोड का वापसी आकार
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
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