class
solution
:def
longestword
(self, words: list[
str])-
>
str:
words.sort(key=
lambda x:(-
len(x)
,x))
for w in words:
flag=
1for i in
range(1
,len
(w)+1)
:if w[
:i]not
in words:
flag=
0break
if flag:
return w
return
""
【trie】
class
solution
:def
longestword
(self, words: list[
str])-
>
str:
trie =
# 構建字首樹
for word in words:
print
(word,end=
" ")
cur = trie
for w in word:
cur = cur.setdefault(w,
)print
(trie,
len(trie)
) cur[
'#']
= word
print
(trie,
len(trie)
)# 獲得根結點
stack =
list
(trie.values())
print
(stack)
res =
''while stack:
cur = stack.pop(
)# 如果'#'存在,則表明下乙個單詞有字首單詞,若無則跳過,去兄弟節點
if'#'
in cur:
# 得到儲存的單詞
word = cur[
'#']
# 如果長度更長或者相等且字典序更小時,更新
iflen
(word)
>
len(res)or(
len(word)
==len
(res)
and word: res = word
# 向下查詢它的子結點
for i in cur:
if i!=
'#':
)return res
720 詞典中最長的單詞
給出乙個字串陣列words組成的一本英語詞典。從中找出最長的乙個單詞,該單詞是由words詞典中其他單詞逐步新增乙個字母組成。若其中有多個可行的答案,則返回答案中字典序最小的單詞。若無答案,則返回空字串。示例 1 輸入 words w wo wor worl world 輸出 world 解釋 單詞...
LeetCode 720 詞典中最長的單詞
給出乙個字串陣列words組成的一本英語詞典。從中找出最長的乙個單詞,該單詞是由words詞典中其他單詞逐步新增乙個字母組成。若其中有多個可行的答案,則返回答案中字典序最小的單詞。若無答案,則返回空字串。注意 所有輸入的字串都只包含小寫字母。words陣列長度範圍為 1,1000 words i 的...
LeetCode 720 詞典中最長的單詞
給出乙個字串陣列words組成的一本英語詞典。從中找出最長的乙個單詞,該單詞是由words詞典中其他單詞逐步新增乙個字母組成。若其中有多個可行的答案,則返回答案中字典序最小的單詞。若無答案,則返回空字串。示例 1 輸入 words w wo wor worl world 輸出 world 解釋 單詞...