leetcode208 實現字首樹插入 查詢

2021-10-10 07:27:18 字數 1276 閱讀 7832

示例:

trie trie=new trie();

你可以假設所有的輸入都是由小寫字母a-z構成的。保證所有輸入均為非空字串。

解題思路:

這裡考查的trie字首樹是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。

trie也叫單詞查詢樹,這一高效的資料結構有非常多的應用:

自動補全、拼寫檢查、ip路由(最長字首匹配)、九宮格打字**、單詞**等。

trie樹的節點結構:

trie樹是乙個有根的樹,其節點具有以下字段:

(2)布林字段,以指定節點是對應鍵的結尾還是只是鍵字首。

trie樹中最常見的兩個操作是鍵的插入和查詢。

向trie樹中插入鍵:

(2)鏈結不存在。建立乙個新的節點,並將它與父節點的鏈結相連,該鏈結與當前的鍵字元相匹配。

重複以上步驟,直到到達鍵的最後乙個字元,然後將當前節點標記為結束節點,演算法完成。

在trie樹中查詢鍵:

(2)不存在鏈結。若已無鍵字元,且當前節點標記為isend,則返回true。否則有兩種情況均返回false:

a.還有鍵字元剩餘,但無法跟隨trie樹的鍵路徑,找不到鍵。

b.沒有鍵字元剩餘,但當前節點沒有標記為isend。也就是說,待查詢鍵只是trie樹中另乙個鍵的字首。

查詢trie樹中的鍵字首:

該方法和查詢基本相似,甚至更簡單因為不需要考慮當前trie節點是否"isend"標記,因為我們搜尋的是鍵的字首,而不是整個鍵。

package main

import "fmt"

type trie struct

/*初始化結構體變數*/

func constructor() trie

}/*往結構體中插入單詞*/

func (nums *trie)insert(word string)else

} nums.isend=true

}/*查詢單詞*/

func (nums *trie)search(word string)bool

nums=nums.next[v-'a']

} if nums.isend==false

return true

}/*查詢trie樹中的鍵字首*/

func (nums *trie)startwith(prefix string)bool

nums=nums.next[v-'a']

} return true

}func main()

208 實現Trie 字首樹

實現乙個 trie 字首樹 包含 insert,search,和 startswith 這三個操作。示例 trie trie new trie 說明 你可以假設所有的輸入都是由小寫字母 a z 構成的。保證所有輸入均為非空字串。class trie def init self self.root d...

208 實現乙個字首樹

題目描述 實現乙個 trie 字首樹 包含insert,search,和startswith這三個操作。示例 trie trie newtrie trie.insert trie.search 返回 true trie.search 返回 false trie.startswith 返回 true ...

LeetCode 第 208 場周賽

都是暴力題沒啥好說,主要是想吐槽一下題面xd 資料夾操作日誌蒐集器 每當使用者執行變更資料夾操作時,leetcode 檔案系統都會儲存一條日誌記錄。下面給出對變更操作的說明 移動到當前資料夾的父資料夾。如果已經在主資料夾下,則 繼續停留在當前資料夾 繼續停留在當前資料夾。x 移動到名為 x 的子資料...