मान लीजिए हमारे पास words नामक लोअरकेस वर्णमाला स्ट्रिंग्स की एक सूची है, हमें दो अलग-अलग शब्दों की लंबाई का अधिकतम योग ढूंढना है जो एक सामान्य अक्षर साझा नहीं करते। इसलिए, यदि इनपुट words = ["abcd", "mno", "abdcmno", "amno"] जैसा है, तो आउटपुट 7 होगा, क्योंकि जो शब्द कोई सामान्य अक्षर साझा नहीं करते वे ["abcd", "mno"] हैं, कुल लंबाई 7 है।
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे −
- एक फ़ंक्शन sign() परिभाषित करें। यह word लेगा
- value := 0
- प्रत्येक c के लिए word में, करें
- value := value OR (2^(c का ASCII - 'a' का ASCII))
- value वापस करें
- मुख्य विधि से, निम्नलिखित करें
- signature := प्रत्येक x के लिए words में sign(x) की सूची
- ans := 0
- i के लिए 0 से words के आकार तक की रेंज में, करें
- j के लिए i + 1 से words के आकार तक की रेंज में, करें
- यदि signature[i] AND signature[j], 0 के समान है, तो
- ans := ans और words[i] का आकार + words[j] का आकार का अधिकतम
- यदि signature[i] AND signature[j], 0 के समान है, तो
- j के लिए i + 1 से words के आकार तक की रेंज में, करें
- ans वापस करें
बेहतर समझ के लिए निम्नलिखित कार्यान्वयन देखें −
उदाहरण
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