208 實現乙個字首樹

2021-09-26 16:20:00 字數 2272 閱讀 2847

題目描述:

實現乙個 trie (字首樹),包含insert,search, 和startswith這三個操作。

示例:

trie trie =

newtrie()

;trie.

insert()

;trie.

search()

;// 返回 true

trie.

search()

;// 返回 false

trie.

startswith()

;// 返回 true

trie.

insert()

;

trie.

search()

;// 返回 true

說明:

你可以假設所有的輸入都是由小寫字母a-z構成的。

保證所有輸入均為非空字串。

知識點:

思路和**:

這個**有問題

自己測試**感覺沒啥問題,但是leetcode上提交報錯不知為啥,如果有幸被大佬看到,歡迎指正

class

trienode

:"""

trie節點

"""def__init__

(self)

: self.link_dict=

dict()

self.is_end=

false

defput

(self,c)

:# 向鏈結集中加入新的鏈結節點

self.link_dict[c]

=trienode(

)def

contain

(self,c)

:return c in self.link_dict

class

trie

:def

__init__

(self)

: self.root=trienode(

)def

insert

(self,s)

: curr_root=self.root

flag =

false

s_length =

len(s)

for i in

range

(s_length)

:if curr_root.contain(s[i]):

if i < s_length -1:

curr_root = curr_root.link_dict[s[i]

]else

: curr_root.put(s[i]

)if i < s_length -1:

curr_root = curr_root.link_dict[s[i]

] curr_root.is_end=

true

defsearch

(self,s)

: curr_root = self.root

s_length=

len(s)

for i in

range

(s_length)

:if curr_root.contain(s[i]):

# 存在該字元鏈結節點

if icurr_root = curr_root.link_dict[s[i]

]else

:# 判斷最後乙個字元鏈結節點是否為end

if curr_root.is_end:

return

true

else

:return

false

else

:return

false

defstartswith

(self,s)

: curr_root = self.root

for c in s:

if curr_root.contain(c)

:# 只判斷是否存在該字元鏈結節點

curr_root = curr_root.link_dict[c]

else

:# 無鏈結直接返回false

return

false

return

true

# 遍歷完成後返回true

208 實現Trie 字首樹

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

leetcode208 實現字首樹插入 查詢

示例 trie trie new trie 你可以假設所有的輸入都是由小寫字母a z構成的。保證所有輸入均為非空字串。解題思路 這裡考查的trie字首樹是一種有序樹,用於儲存關聯陣列,其中的鍵通常是字串。trie也叫單詞查詢樹,這一高效的資料結構有非常多的應用 自動補全 拼寫檢查 ip路由 最長字首...

字首樹 java實現)

package class 07 字首樹 例子 乙個字串型別的陣列arr1,另乙個字串型別的陣列arr2。arr2中有哪些字元,是arr1中出現的?請列印 arr2中有哪些字元,是作為arr1中某個字串字首出現的?請列印 arr2中有哪些字元,是作為arr1中某個字串字首出現的?請列印arr2中出現...