題目連結(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é)的字元去走,這樣子可以確保找到的字串的前綴都在樹中。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。