題目描述:
實現乙個 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中出現...