leetcode 720. Longest Word in Dictionary
Given a list of strings words
representing an English Dictionary, find the longest word in words
that can be built one character at a time by other words in words
. If there is more than one possible answer, return the longest word with the smallest lexicographical order.
If there is no answer, return the empty string.
Example 1:
Input: words = ["w","wo","wor","worl", "world"] Output: "world" Explanation: The word "world" can be built one character at a time by "w", "wo", "wor", and "worl".
Example 2:
Input: words = ["a", "banana", "app", "appl", "ap", "apply", "apple"] Output: "apple" Explanation: Both "apply" and "apple" can be built from other words in the dictionary. However, "apple" is lexicographically smaller than "apply".
Note:
- All the strings in the input will only contain lowercase letters.
- The length of
words
will be in the range[1, 1000]
. - The length of
words[i]
will be in the range[1, 30]
.
排序+set解法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | class Solution( object ): def longestWord( self , words): """ :type words: List[str] :rtype: str """ # use greey algo # find the most length word that can be built one character at a time by other words in words words_set = set ([""]) words.sort() ans = "" for word in words: if word[: - 1 ] in words_set: if len (word) > len (ans): ans = word words_set.add(word) return ans |
或者是trie:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | class Node( object ): def __init__( self , val = ""): self .val = val self .subs = collections.defaultdict(Node) class Trie( object ): def __init__( self ): self .root = Node("") def insert( self , s): node = self .root for c in s: node = node.subs[c] node.val = s def longest_word( self ): self .ans = "" def dfs(node): for k, n in node.subs.items(): if n.val: if len (n.val)> len ( self .ans) or ( len (n.val) = = len ( self .ans) and n.val< self .ans): self .ans = n.val dfs(n) dfs( self .root) return self .ans class Solution( object ): def longestWord( self , words): """ :type words: List[str] :rtype: str """ trie = Trie() for word in words: trie.insert(word) return trie.longest_word() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」