ETH官方钱包

前往
大廳
主題

LeetCode - 720. Longest Word in Dictionary 解題心得

Not In My Back Yard | 2021-01-01 00:00:19 | 巴幣 0 | 人氣 232

題目連結(jié):


題目意譯:
(因?yàn)樵}敘述難以理解,所以更動了一些句子)
給定一個(gè)字串列表 words 代表著英文字典,找到 words 中最長的字詞,其所有的前綴皆位於 words 中。如果有多個(gè)可能的答案,則回傳其中字典序最小的。

如果答案不存在,則回傳空字串。

注:
所有輸入字串只會包含小寫字母。
words 的長度位於 [1, 1000] 範(fàn)圍中。
words[i] 的長度位於 [1, 30] 範(fàn)圍中。



範(fàn)例測資:
範(fàn)例 1:
輸入: words = ["w","wo","wor","worl", "world"]
輸出: "world"
解釋: "world" 所有前綴 "w" 、 "wo" 、 "wor" 以及 "worl" (當(dāng)然 "world" 自身也算)都位於 words 中。

範(fàn)例 2:
輸入: words = ["a", "banana", "app", "appl", "ap", "apply", "apple"]
輸出: "apple"
解釋: "apply" 和 "apple" 皆符合要求(且皆為最長)。但是 "apple" 的字典序小於 "apply"。


解題思維:
最直觀的方式就是先將所有的字詞都丟進(jìn)一個(gè)集合裡。然後對於每個(gè)字詞,掃過其每個(gè)前綴,看是不是都在剛剛的集合裡面。

如果有多個(gè)字詞的前綴皆在裡面,則先比較長度,長度相同再比較字典序。



但是更有效率的方式應(yīng)為建立一棵前綴樹(Trie,可以參見維基),每個(gè)節(jié)點(diǎn)儲存一個(gè)字元以及以該字元作結(jié)的字串之索引值。

然後以深度優(yōu)先搜尋(Depth First Search,DFS)找到那些最長的字詞。每次只往那些有字串以它們作結(jié)的字元去走,這樣子可以確保找到的字串的前綴都在樹中。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創(chuàng)作回應(yīng)

更多創(chuàng)作