मान लीजिए कि हमारे पास शब्दों नामक लोअरकेस वर्णानुक्रम की एक सूची है, हमें दो अलग-अलग शब्दों की लंबाई का अधिकतम योग खोजना होगा जो एक सामान्य अक्षर साझा नहीं करते हैं। इसलिए, यदि इनपुट शब्दों की तरह है =["abcd", "mno ", "abdcmno", "amno"], तो आउटपुट 7 होगा, क्योंकि शब्द साझा नहीं करते हैं कोई भी सामान्य अक्षर ["abcd", "mno"] हैं, कुल लंबाई 7 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- फ़ंक्शन साइन() को परिभाषित करें। यह शब्द लेगा
- मान :=0
- शब्द में प्रत्येक सी के लिए, करें
- मान :=मान या (2^(सी का एएससीआईआई - 'ए' का एएससीआईआई))
- वापसी मूल्य
- मुख्य विधि से, निम्न कार्य करें
- हस्ताक्षर:=शब्दों में प्रत्येक x के लिए चिह्न (x) के साथ एक सूची
- उत्तर:=0
- मैं के लिए 0 से लेकर शब्दों के आकार तक, करें
- जे श्रेणी में i + 1 से शब्दों के आकार के लिए, करें
- यदि हस्ताक्षर[i] और हस्ताक्षर[j] 0 के समान है, तो
- उत्तर:=अधिकतम उत्तर और शब्दों का आकार[i] + शब्दों का आकार[j]
- यदि हस्ताक्षर[i] और हस्ताक्षर[j] 0 के समान है, तो
- जे श्रेणी में i + 1 से शब्दों के आकार के लिए, करें
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def sign(self, word): value = 0 for c in word: value = value | (1 << (ord(c) - 97)) return value def solve(self, words): signature = [self.sign(x) for x in words] ans = 0 for i in range(len(words)): for j in range(i + 1, len(words)): if signature[i] & signature[j] == 0: ans = max(ans, len(words[i]) + len(words[j])) return ans ob = Solution() words = ["abcd", "mno", "abdcmno", "amno"] print(ob.solve(words))
इनपुट
["abcd", "mno", "abdcmno", "amno"]
आउटपुट
7