मान लीजिए कि हमारे पास एक अंग्रेजी शब्दकोश का प्रतिनिधित्व करने वाले शब्दों की एक सूची है, हमें दी गई शब्द सूची में सबसे लंबा शब्द ढूंढना है जिसे शब्दों में दूसरे शब्दों द्वारा एक समय में एक वर्ण बनाया जा सकता है। यदि एक से अधिक संभावित उत्तर हैं, तो सबसे छोटे शब्द को सबसे छोटे शब्दकोषीय क्रम के साथ लौटाएं। अगर कोई जवाब नहीं है, तो खाली स्ट्रिंग वापस कर दें।
इसलिए, यदि इनपुट ["h",,"he",,"hel",,"hell", "hello"] जैसा है, तो आउटपुट "हैलो" होगा
इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -
- कोशिश करें:=एक नया नक्शा
- एक फंक्शन इंसर्ट () को परिभाषित करें। यह शब्द लेगा
- अब :=ट्राई
- शब्द में प्रत्येक सी के लिए, करें
- अगर c अभी नहीं है −
- अब[c] ={'#', False}, फिर
- अब :=अब[c]
- अब['#'] :=सच
- अगर c अभी नहीं है −
- फ़ंक्शन को परिभाषित करें search() । यह शब्द लेगा
- अब :=ट्राई
- शब्द में प्रत्येक सी के लिए, करें
- यदि '#' अभी में है और अभी नहीं ['#'] सत्य है, तो
- झूठी वापसी
- अब :=अब[c]
- अभी वापस आएं['#']
- यदि '#' अभी में है और अभी नहीं ['#'] सत्य है, तो
- शब्दों में प्रत्येक शब्द के लिए, करें
- कॉल इंसर्ट (शब्द)
- उत्तर:=खाली स्ट्रिंग
- शब्दों में प्रत्येक शब्द के लिए, करें
- यदि खोज (शब्द) और (शब्द का आकार> उत्तर का आकार या (शब्द का आकार उत्तर और शब्द के आकार के समान है)), तो
- उत्तर:=शब्द
- यदि खोज (शब्द) और (शब्द का आकार> उत्तर का आकार या (शब्द का आकार उत्तर और शब्द के आकार के समान है)), तो
- वापसी उत्तर
आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -
उदाहरण
class Solution: def longestWord(self, words): self.trie = {} def insert(word): now = self.trie for c in word: if c not in now: now[c] = {'#': False} now = now[c] now['#'] = True def search(word): now = self.trie for c in word: if '#' in now and not now['#']: return False now = now[c] return now['#'] for word in words: insert(word) ans = "" for word in words: if (search(word) and (len(word) > len(ans) or (len(word) == len(ans) and word < ans))): ans = word return ans ob = Solution() print(ob.longestWord(["h","he","hel","hell", "hello"]))
इनपुट
["h","he","hel","hell", "hello"]
आउटपुट
hello