ধরুন আমাদের কাছে শব্দ বলা ছোট হাতের বর্ণানুক্রমিক স্ট্রিংগুলির একটি তালিকা রয়েছে, আমাদেরকে দুটি স্বতন্ত্র শব্দের দৈর্ঘ্যের সর্বাধিক যোগফল খুঁজে বের করতে হবে যেগুলি একটি সাধারণ অক্ষর ভাগ করে না। সুতরাং, যদি ইনপুটটি শব্দের মতো হয় =["abcd", "mno ", "abdcmno", "amno"], তাহলে আউটপুট হবে 7, যেহেতু শব্দগুলো কোনো সাধারণ অক্ষর ভাগ করে না ["abcd", "mno"], মোট দৈর্ঘ্য 7।
এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব -
- একটি ফাংশন চিহ্ন () সংজ্ঞায়িত করুন। এটি শব্দ গ্রহণ করবে
- মান :=0
- শব্দের প্রতিটি c-এর জন্য, করুন
- মান :=মান OR (2^(c এর ASCII - 'a' এর ASCII))
- রিটার্ন মান
- মূল পদ্ধতি থেকে, নিম্নলিখিতগুলি করুন
- স্বাক্ষর :=প্রতিটি x শব্দের জন্য চিহ্ন(x) সহ একটি তালিকা
- উত্তর :=0
- আমি 0 থেকে শব্দের আকারের মধ্যে,
- করুন
- j রেঞ্জ i + 1 থেকে শব্দের আকারের জন্য, করুন
- যদি স্বাক্ষর[i] এবং স্বাক্ষর[j] 0 এর মত হয়, তাহলে
- উত্তর :=সর্বাধিক উত্তর এবং শব্দের আকার[i] + শব্দের আকার[j]
- যদি স্বাক্ষর[i] এবং স্বাক্ষর[j] 0 এর মত হয়, তাহলে
- j রেঞ্জ 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