資料結構實作: Implement Trie 前綴樹Leetcode #208_精選75題

2024/02/27閱讀時間約 9 分鐘

題目敘述

題目已經給定一個Trie前綴樹的類別和相關的函式介面interface,
要求我們把功能實作出來。

Trie() 建構子,初始化一個空的Trie。

void insert(String word)
插入一個新的單字word到Trie裡面。

boolean search(String word)
搜尋word是否存在Trie裡面,假如有,回傳True;如果沒有,回傳False。

boolean startsWith(String prefix)
搜尋prefix前綴是否存在Trie裡面,假如有,回傳True;如果沒有,回傳False。


題目的原文敘述


測試範例

Example 1:

Input
["Trie", "insert", "search", "search", "startsWith", "insert", "search"]
[[], ["apple"], ["apple"], ["app"], ["app"], ["app"], ["app"]]
Output
[null, null, true, false, true, null, true]

Explanation
Trie trie = new Trie();
trie.insert("apple");
trie.search("apple"); // return True
trie.search("app"); // return False
trie.startsWith("app"); // return True
trie.insert("app");
trie.search("app"); // return True

約束條件

Constraints:

  • 1 <= word.length, prefix.length <= 2000

單字的長度 和 前綴的長度都介於1~2000個字元之間。

  • word and prefix consist only of lowercase English letters.

輸入只會有英文小寫字母。

  • At most 3 * 10^4 calls in total will be made to insertsearch, and startsWith.

動態測試時,最多會有三萬次函式呼叫,包含insert(), search(), startWith()


演算法 多層架構 + 字典

其實Trie的結構和Tree很像,差別在於每一層儲存的是鍵值:字元,而映射到的value就是下一層的字典(Python dictionary)


1.建構子Trie()比較簡單,一開始初始化一個空的字典即可,代表初始化成空的Trie。

2.每當新插入一個單字insert(word)時,就依序把每一個字元從上到下,插入到Trie的多層架構字典中,最後再加上一個"@"當作結尾符號。

為什麼要有結尾符號?
是為了要區別search() 和 startWith()的對應結果。
以行動支持創作者!付費即可解鎖
本篇內容共 3702 字、0 則留言,僅發佈於Leetcode 精選75題 上機考面試題 詳解你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
39會員
277內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
發表第一個留言支持創作者!