1554. Strings Differ by One Character
class Trie():
def __init__(self):
self.children = collections.defaultdict(Trie)
self.isWord = False
def insert(self, word):
node = self
for c in word:
node = node.children[c]
node.isWord = True
def search(self, word, idx, miss_count):
for c, child in self.children.items(): # 每条路径都要去查找
is_diff = c != word[idx] # 不用担心idx溢出,因为same length
if miss_count + is_diff <= 1 and child.search(word, idx+1, miss_count + is_diff):
return True
return self.isWord and miss_count == 1
class Solution:
def differByOne(self, dict: List[str]) -> bool:
trie = Trie()
for w in dict:
trie.insert(w)
for w in dict: # N
if trie.search(w, 0, 0): # m*n m is the 字母长度, 每条路径都要遍历
return True
return False
212. Word Search II
class TrieNode():
def __init__(self):
self.children = collections.defaultdict(TrieNode)
self.isWord = False
class Trie():
def __init__(self):
self.root = TrieNode()
def insert(self, word):
node = self.root
for w in word:
node = node.children[w]
node.isWord = True
def search(self, word):
node = self.root
for w in word:
node = node.children.get(w)
if not node:
return False
return node.isWord
class Solution(object):
def findWords(self, board, words):
res = []
trie = Trie()
node = trie.root
for w in words:
trie.insert(w)
for i in xrange(len(board)):
for j in xrange(len(board[0])):
self.dfs(board, node, i, j, "", res)
return res
def dfs(self, board,