付費限定

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

更新於 發佈於 閱讀時間約 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()的對應結果。

search()比較嚴格,必須整個字串相同,才算有找到
startWith比較寬鬆,只要前綴prefix可以和Trie裡面的任何一個單字的前綴吻合,就算成功。

以行動支持創作者!付費即可解鎖
本篇內容共 3702 字、1 則留言,僅發佈於Leetcode精選75題 解析+統整你目前無法檢視以下內容,可能因為尚未登入,或沒有該房間的查看權限。
avatar-img
90會員
425內容數
由有業界實戰經驗的演算法工程師, 手把手教你建立解題的框架, 一步步寫出高效、清晰易懂的解題答案。 著重在讓讀者啟發思考、理解演算法,熟悉常見的演算法模板。 深入淺出地介紹題目背後所使用的演算法意義,融會貫通演算法與資料結構的應用。 在幾個經典的題目融入一道題目的多種解法,或者同一招解不同的題目,擴展廣度,並加深印象。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
題目敘述 題目會給我們兩個輸入陣列spells咒語、potions藥水,還有一個參數success。 當咒語和藥水相乘的值 > success就是一個成功配對。 請問每個咒語能夠形成的成功配對數有多少? 以陣列的形式輸出返回答案。 題目的原文敘述 測試範例 Example 1:
題目敘述 題目會給兩個陣列nums1和nums2。 題目要求我們從中同步選擇長度為k的子序列,並且最大化子序列的分數, 回傳最高的分數值。 分數的定義: 分數 = (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] ,
題目敘述 題目會給定一個輸入陣列piles,代表每堆香蕉所擁有的香蕉數量,和 一個時間上限h小時。 Koko喜歡吃香蕉,每小時可以吃k個香蕉,請問k值最少需要多少,才能讓Koko在h小時內吃完所有的香蕉? 題目的原文敘述 測試範例 Example 1: Input: piles =
題目敘述 題目會給定一個二維陣列grid,代表每顆橘子分布的位置和初始狀態。 0: 這個格子點沒有東西。 1: 這個格子點有一顆新鮮的橘子。 2: 這個格子點有一顆壞掉的橘子。 壞掉的橘子上面的黴菌, 每隔一個週期,可以向上、下、左、右 N4四連通的格子點感染一次。 請問,最少需要多
題目敘述 題目會給定三個參數a, b, c。 請問透過bit flip a 或 b 的binary bits,讓 a OR b = c 最少需要幾次bit flip? 題目的原文敘述 測試範例 Example 1: Input: a = 2, b = 6, c = 5 Output:
題目敘述 題目會給定一個參數n代表人口總數,和對應的信任關係陣列trust,陣列元素都是pair都以,[a, b]的形式呈現,代表a信任b。 要求我們找出法官是誰,返回法官的ID? 成為法官的條件: 1.每個人(除了法官自己之外)都信任法官。 2.法官不信任別人。 題目的原文敘述
題目敘述 題目會給我們兩個輸入陣列spells咒語、potions藥水,還有一個參數success。 當咒語和藥水相乘的值 > success就是一個成功配對。 請問每個咒語能夠形成的成功配對數有多少? 以陣列的形式輸出返回答案。 題目的原文敘述 測試範例 Example 1:
題目敘述 題目會給兩個陣列nums1和nums2。 題目要求我們從中同步選擇長度為k的子序列,並且最大化子序列的分數, 回傳最高的分數值。 分數的定義: 分數 = (nums1[i0] + nums1[i1] +...+ nums1[ik - 1]) * min(nums2[i0] ,
題目敘述 題目會給定一個輸入陣列piles,代表每堆香蕉所擁有的香蕉數量,和 一個時間上限h小時。 Koko喜歡吃香蕉,每小時可以吃k個香蕉,請問k值最少需要多少,才能讓Koko在h小時內吃完所有的香蕉? 題目的原文敘述 測試範例 Example 1: Input: piles =
題目敘述 題目會給定一個二維陣列grid,代表每顆橘子分布的位置和初始狀態。 0: 這個格子點沒有東西。 1: 這個格子點有一顆新鮮的橘子。 2: 這個格子點有一顆壞掉的橘子。 壞掉的橘子上面的黴菌, 每隔一個週期,可以向上、下、左、右 N4四連通的格子點感染一次。 請問,最少需要多
題目敘述 題目會給定三個參數a, b, c。 請問透過bit flip a 或 b 的binary bits,讓 a OR b = c 最少需要幾次bit flip? 題目的原文敘述 測試範例 Example 1: Input: a = 2, b = 6, c = 5 Output:
題目敘述 題目會給定一個參數n代表人口總數,和對應的信任關係陣列trust,陣列元素都是pair都以,[a, b]的形式呈現,代表a信任b。 要求我們找出法官是誰,返回法官的ID? 成為法官的條件: 1.每個人(除了法官自己之外)都信任法官。 2.法官不信任別人。 題目的原文敘述
你可能也想看
Google News 追蹤
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
  嗯……這篇是類疊跟設問的場合。也是快變成國文課的場合。 ❈❈❈   ※類疊法:   接二連三地反覆使用相同的一個字詞、語句。可增加文章的節奏感,凸顯文章的重點。   讓句型更加生動,避免枯燥,任何詞性都可以被重疊。名詞重疊常表示數量龐大;動詞重疊表示動作的進行;形容詞或副詞的重疊表示委婉
Thumbnail
目錄 序 導論: 一個西方觀點的評述 1.0 從函數到函數算法 ......1.1 句子成份
Thumbnail
魔鬼藏在二分搜尋裡!輸出值代表的意含、題意產生的邊界條件,寫完模板才是挑戰的開始 Orz
Thumbnail
隨著理財資訊的普及,越來越多台灣人不再將資產侷限於台股,而是將視野拓展到國際市場。特別是美國市場,其豐富的理財選擇,讓不少人開始思考將資金配置於海外市場的可能性。 然而,要參與美國市場並不只是盲目跟隨標的這麼簡單,而是需要策略和方式,尤其對新手而言,除了選股以外還會遇到語言、開戶流程、Ap
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
LeetCode 是一個程式語言版的線上題庫平臺,提供題目描述、程式碼區塊、解題者分享的解法和疑問討論。藉由這篇文章分享我在 LeetCode 上的使用經驗和觀點,包括刷題的重要性、解題心態和練習目標。
前言 在閱讀《強化式學習:打造最強 AlphaZero 通用演算法》時,對一些看似基本,但是重要且會影響到之後實作的項目概念有點疑惑,覺得應該查清楚,所以搞懂後記錄下來,寫下這篇文章(應該說是筆記?)。 正文 下面這段程式碼: model = Sequential() model.add
  嗯……這篇是類疊跟設問的場合。也是快變成國文課的場合。 ❈❈❈   ※類疊法:   接二連三地反覆使用相同的一個字詞、語句。可增加文章的節奏感,凸顯文章的重點。   讓句型更加生動,避免枯燥,任何詞性都可以被重疊。名詞重疊常表示數量龐大;動詞重疊表示動作的進行;形容詞或副詞的重疊表示委婉
Thumbnail
目錄 序 導論: 一個西方觀點的評述 1.0 從函數到函數算法 ......1.1 句子成份
Thumbnail
魔鬼藏在二分搜尋裡!輸出值代表的意含、題意產生的邊界條件,寫完模板才是挑戰的開始 Orz