মান ল করুন words নামের একটি লোয়ারকেস এলফাবেটিক্যাল স্ট্রিংর তালিকা, আমাদের দুটি আলাদা ওয়ার্ডের দৈর্ঘ্যের সর্বোচ্চ যোগফল খুঁজে বের করতে হবে যারা কোনো কমন লেটার শেয়ার করে না। যদি ইনপুট হয় words = ["abcd", "mno", "abdcmno", "amno"], তবে আউটপুট হবে ৭, কারণ কমন লেটার শেয়ার না করার ওয়ার্ডগুলো ["abcd", "mno"], মোট দৈর্ঘ্য ৭।
এটি সমাধান করতে আমরা নিম্নলিখিত ধাপগুলি অনুসরণ করব:
- একটি sign() ফাংশন সংজ্ঞায়িত করুন। এটি word গ্রহণ করবে।
- value := 0
- word-এ থাকা প্রতিটি c-এর জন্য: value := value OR (2^(ASCII of c - ASCII of 'a'))
- value ফেরত দিন
- মূল মেথড থেকে: signature := [sign(x) for x in words], ans := 0। i কে ০ থেকে words-এর আকার পর্যন্ত লুপ চালান: j কে i+1 থেকে words-এর আকার পর্যন্ত লুপ চালান: যদি signature[i] & signature[j] == 0, ans := max(ans, len(words[i]) + len(words[j]))। 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