forked from yingl/LintCodeInPython
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathimplement_trie.py
53 lines (46 loc) · 1.33 KB
/
implement_trie.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# -*- coding: utf-8 -*-
class TrieNode:
def __init__(self):
# Initialize your data structure here.
self.map = {} # 记录后序某个字母是否出现
self.isLeaf = False
class Trie:
def __init__(self):
self.root = TrieNode() # 根节点
# @param {string} word
# @return {void}
# Inserts a word into the trie.
def insert(self, word):
root = self.root
for ch in word:
if ch not in root.map:
root.map[ch] = TrieNode() # ch出现并记录
root = root.map[ch]
root.isLeaf = True # 该节点可以为叶子节点
# @param {string} word
# @return {boolean}
# Returns if the word is in the trie.
def search(self, word):
root = self.root
i = 0
for ch in word:
if ch not in root.map: # 找不到匹配字符,直接返回False。
return False
else:
i += 1
if (i == len(word)) and root.map[ch].isLeaf: # 判断是否最后一个字母且为叶子节点
return True
root = root.map[ch]
return False
# @param {string} prefix
# @return {boolean}
# Returns if there is any word in the trie
# that starts with the given prefix.
def startsWith(self, prefix):
root = self.root
for ch in prefix:
if ch not in root.map:
return False
else:
root = root.map[ch]
return True