https://leetcode.com/problems/add-and-search-word-data-structure-design/
同样是关于trie.只是在search的时候要dfs backtracking
参考http://yucoding.blogspot.hk/2015/07/leetcode-question-add-and-search-word.html
class TrieNode:
def __init__(self):
self.value = 0
self.children = [None]*26
class WordDictionary:
# initialize your data structure here.
def __init__(self):
self.trie = TrieNode()
self.count = 0
# @param {string} word
# @return {void}
# Adds a word into the data structure.
def addWord(self, word):
p = self.trie
for ch in word:
idx = ord(ch)-ord('a')
if not p.children[idx]:
p.children[idx] = TrieNode()
p = p.children[idx]
self.count += 1
p.value = self.count
def search2(self, word, pos, p):#这里用dfs模板
if pos == len(word):
if p.value == 0:
return False
else:
return True
else:
if word[pos] == '.':
for pp in p.children:
if pp:
if self.search2(word, pos+1, pp):
return True
return False
else:
idx = ord(word[pos])-ord('a')
if not p.children[idx]:
return False
else:
return self.search2(word, pos+1, p.children[idx])
# @param {string} word
# @return {boolean}
# Returns if the word is in the data structure. A word could
# contain the dot character '.' to represent any one letter.
def search(self, word):
return self.search2(word, 0, self.trie)