LEETCODE 211. 添加与搜索单词 – 数据结构设计

LEETCODE 211. 添加与搜索单词 – 数据结构设计

题目描述

设计一个支持以下两种操作的数据结构:

void addWord(word)
bool search(word)
search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 可以表示任何一个字母。

示例:

addWord(“bad”)
addWord(“dad”)
addWord(“mad”)
search(“pad”) -> false
search(“bad”) -> true
search(“.ad”) -> true
search(“b..”) -> true
说明:

你可以假设所有单词都是由小写字母 a-z 组成的。

题目地址
中文版
英文版

 

代码实现


class WordDictionary(object):

	def __init__(self):
		"""
		Initialize your data structure here.
		"""
		self.root = {}

	def addWord(self, word):
		"""
		Adds a word into the data structure.
		:type word: str
		:rtype: None
		"""
		node = self.root
		for c in word:
			node = node.setdefault(c,{})
		node["#"] = {}

	def search(self, word):
		"""
		Returns if the word is in the data structure. A word could contain the 
                 dot character '.' to represent any one letter.
		:type word: str
		:rtype: bool
		"""
		if(not word):
			return False
		node = self.root
		def dfs(word,node):
			if(not word):
				if("#" in node):
					return True
				return False
			if(word[0]=="."):
				for k in node:
					if dfs(word[1:],node[k]):
						return True
			elif(word[0] in node):
				if dfs(word[1:],node[word[0]]):
					return True
			return False
		return dfs(word,node)
					
			
			

# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)
                                                                                             
0 次阅读

发表评论

电子邮件地址不会被公开。