给出一个字符串数组 words 组成的一本英语词典。返回 words 中最长的一个单词,该单词是由 words 词典中其他单词逐步添加一个字母组成。
思路:将words放入集合中。对words中的词进行排序,按长度优先,长度相同按照单词顺序。
然后对排序后的单词进行遍历。如果该单词所有的前缀都在集合中,则输出该单词。
class Solution(object): def longestWord(self, words): wordset = set(words) words.sort(key = lambda c: (-len(c), c)) for word in words: if all(word[:k] in wordset for k in range(1, len(word))): return word return ""
知识点:
数组排序:
(a,b,c) < (x,y,z) 多个元素会按顺序比较,依次比较a<x b<y c<z 。
从而可以利用元组实现按多个方面排序。
通过给出 key 让数组按合适的方式升序排序。(指定reversed=True可以实现降序)
例如:
words.sort(key = lambda c: (-len(c), c))
比较参数有两个 -len(c) ,c 会先比较-len(c) ,在比较c 实现长度长的在前,长度相同比较c本身。
all()
all( f(a) for a in xxx ) 对xxx的每个元素判断是否满足条件f,都满足返回True,否则返回False。