目录

0720:词典中最长的单词(★)

力扣第 720 题

题目

给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。

若其中有多个可行的答案,则返回答案中字典序最小的单词。若无答案,则返回空字符串。

请注意,单词应该从左到右构建,每个额外的字符都添加到前一个单词的结尾。

示例 1:

输入:words = ["w","wo","wor","worl", "world"]
输出:"world"
解释: 单词"world"可由"w", "wo", "wor", 和 "worl"逐步添加一个字母组成。

示例 2:

输入:words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]
输出:"apple"
解释:"apply" 和 "apple" 都能由词典中的单词组成。但是 "apple" 的字典序小于 "apply"

提示:

  • 1 <= words.length <= 1000
  • 1 <= words[i].length <= 30
  • 所有输入的字符串 words[i] 都只包含小写字母。

相似问题:

分析

将单词排序,单词的前缀如果存在,必然排在前面。

边遍历边将符合条件(所有前缀都在词典中)的单词存在哈希中,那么 word 符合条件等价于 word[:-1] 在哈希中。

哈希中最长且最早出现的单词即为所求。

解答

1
2
3
4
5
6
7
def longestWord(self, words):
    res, vis = '', {''}
    for word in sorted(words):
        if word[:-1] in vis:
            vis.add(word)
            res = word if len(word) > len(res) else res
    return res

40 ms