ধরুন আমাদের কাছে শব্দের একটি তালিকা এবং অক্ষর নামক একটি স্ট্রিং আছে, আমাদের প্রদত্ত অক্ষরগুলিকে পুনর্বিন্যাস করে তৈরি করা যেতে পারে এমন দীর্ঘতম শব্দের আকার খুঁজে বের করতে হবে। অক্ষরগুলিতে তারকাচিহ্নের অক্ষর থাকতে পারে (*) এটি যে কোনও অক্ষরের সাথে মেলে। এবং সমস্ত অক্ষর ব্যবহার করার প্রয়োজন নেই।
সুতরাং, যদি ইনপুট শব্দের মত হয় =["prince", "rice", "price", "limit", "hello"] letters ="*r**ce*", তাহলে আউটপুট হবে 6, যেমন আমরা যে দীর্ঘতম শব্দটি তৈরি করতে পারি তা হল "প্রিন্স" এর দৈর্ঘ্য হল 6৷
৷এটি সমাধান করতে, আমরা এই পদক্ষেপগুলি অনুসরণ করব:
- আছে :=অক্ষরে প্রতিটি উপাদানের অক্ষর এবং ফ্রিকোয়েন্সি সম্বলিত একটি মানচিত্র
- একটি ফাংশন বৈধ() সংজ্ঞায়িত করুন। এটি s লাগবে
- প্রয়োজন :=s তে প্রতিটি উপাদানের অক্ষর এবং ফ্রিকোয়েন্সি সম্বলিত একটি মানচিত্র
- অতিরিক্ত :=সমস্ত উপাদানের যোগফল (সর্বোচ্চ 0 এবং প্রয়োজন[char] - আছে[char] প্রয়োজনের সকল চরগুলির জন্য)
- সত্য ফেরত যখন অতিরিক্ত <=আছে["*"]
- প্রধান পদ্ধতি থেকে নিম্নলিখিতগুলি করুন:
- তালিকার সমস্ত উপাদানের সর্বাধিক প্রদান করুন [শব্দটি বৈধ হলে সমস্ত শব্দের জন্য শব্দের আকার]
আরও ভালভাবে বোঝার জন্য আসুন নিম্নলিখিত বাস্তবায়ন দেখি:
উদাহরণ
from collections import Counter class Solution: def solve(self, words, letters): has = Counter(letters) def valid(s): need = Counter(s) extra = sum([max(0, need[char] - has[char]) for char in need]) return extra <= has["*"] return max([len(word) for word in words if valid(word)]) ob = Solution() words = ["prince", "rice", "price", "limit", "hello"] letters = "*r**ce*" print(ob.solve(words, letters))
ইনপুট
["prince", "rice", "price", "limit", "hello"], "*r**ce*"
আউটপুট
6