मान लीजिए हमारे पास शब्दों की एक सूची और letters नामक एक स्ट्रिंग है, हमें दिए गए अक्षरों को पुनर्व्यवस्थित करके बनाए जा सकने वाले सबसे लंबे शब्द का आकार ढूंढना है। letters में एस्टेरिस्क वर्ण (*) हो सकता है जो किसी भी वर्ण से मेल खा सकता है। और सभी अक्षरों का उपयोग करना आवश्यक नहीं है।
उदाहरण के लिए, यदि इनपुट words = ["prince", "rice", "price", "limit", "hello"] letters = "*r**ce*" है, तो आउटपुट 6 होगा, क्योंकि हम जो सबसे लंबा शब्द बना सकते हैं वह "prince" है जिसकी लंबाई 6 है।
इसे हल करने के लिए, हम निम्न चरणों का पालन करेंगे:
- has := letters में प्रत्येक तत्व की आवृत्तियों वाला एक मैप
- एक फ़ंक्शन valid() परिभाषित करें। यह s लेगा
- need := s में प्रत्येक तत्व की आवृत्तियों वाला एक मैप
- extra := सभी (अधिकतम 0 और need[char] - has[char] का योग सभी char के लिए need में)
- सत्य लौटाएं जब extra <= has["*"]
- मुख्य विधि से निम्न करें:
- सूची [word का आकार सभी word के लिए words में जब word वैध है] में सभी तत्वों का अधिकतम लौटाएं
बेहतर समझ के लिए निम्न कार्यान्वयन देखें:
उदाहरण
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