假设我们有一个代表英语词典的单词列表,我们必须在给定单词列表中找到最长的单词,该单词可以一次由其他单词组成一个字符。如果可能的答案不止一个,则返回字典顺序最小的最长单词。如果没有答案,则返回空字符串。
因此,如果输入类似于[“ h”,“ he”,“ hel”,“ hell”,“ hello”]],则输出将为“ hello”
为了解决这个问题,我们将遵循以下步骤-
尝试:=新映射
定义一个功能insert()。这将成为事实
现在:= trie
对于单词中的每个c,
now [c] = {'#',False},然后
如果c现在不在-
现在:=现在[E]
现在['#']:=真
定义一个功能search()。这将成为事实
现在:= trie
对于单词中的每个c,
返回假
如果现在而不是现在的“#”为“真”,则
现在:=现在[E]
现在返回['#']
对于单词中的每个单词,
呼叫插入(字)
ans:=空字符串
对于单词中的每个单词,
回答:=单词
如果搜索(word)和(word的大小> ans的大小或(word的大小与ans的大小相同并且word <ans的大小)),则
返回ans
让我们看下面的实现以更好地理解-
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