字典树
时间:2020-03-24
本文章向大家介绍字典树,主要包括字典树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
208. 实现 Trie (前缀树)
难度中等
实现一个 Trie (前缀树),包含 insert
, search
, 和 startsWith
这三个操作。
示例:
Trie trie = new Trie(); trie.insert("apple"); trie.search("apple"); // 返回 true trie.search("app"); // 返回 false trie.startsWith("app"); // 返回 true trie.insert("app"); trie.search("app"); // 返回 true
说明:
- 你可以假设所有的输入都是由小写字母
a-z
构成的。 - 保证所有输入均为非空字符串。
1 class Trie: 2 3 def __init__(self): 4 """ 5 Initialize your data structure here. 6 """ 7 self.root = {} 8 9 10 def insert(self, word: str) -> None: 11 """ 12 Inserts a word into the trie. 13 """ 14 node = self.root 15 for char in word: 16 #setdefault()方法使用指定的键返回项目的值.如果键不存在,则插入这个具有指定值的键. 17 node = node.setdefault(char, {}) 18 19 node["end"] = True 20 21 22 def search(self, word: str) -> bool: 23 """ 24 Returns if the word is in the trie. 25 """ 26 node = self.root 27 for char in word: 28 if char not in node: 29 return False 30 node = node[char] 31 32 return "end" in node 33 34 35 def startsWith(self, prefix: str) -> bool: 36 """ 37 Returns if there is any word in the trie that starts with the given prefix. 38 """ 39 node = self.root 40 for char in prefix: 41 if char not in node: 42 return False 43 node = node[char] 44 45 return True
插入apple与apply:
{'a': {'p': {'p': {'l': {'e': {'end': True}}}}}}
{'a': {'p': {'p': {'l': {'e': {'end': True}, 'y': {'end': True}}}}}}
设计一个支持以下两种操作的数据结构:
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
组成的。
1 class WordDictionary: 2 3 def __init__(self): 4 """ 5 Initialize your data structure here. 6 """ 7 self.root = {} 8 9 10 def addWord(self, word: str) -> None: 11 """ 12 Adds a word into the data structure. 13 """ 14 node = self.root 15 for char in word: 16 node = node.setdefault(char, {}) 17 18 node['end'] = True 19 20 21 def search(self, word: str) -> bool: 22 """ 23 Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. 24 """ 25 return self._dfs(self.root, word) 26 27 def _dfs(self, dictionary, word): 28 29 for index, char in enumerate(word): 30 if char == '.': 31 res = 0 32 for any_char in dictionary: 33 if any_char != 'end': 34 temp_res = self._dfs(dictionary[any_char], word[index+1:]) 35 res += temp_res 36 return res != 0 37 38 elif char not in dictionary: 39 return False 40 41 else: 42 dictionary = dictionary[char] 43 44 return 'end' in dictionary
原文地址:https://www.cnblogs.com/dede-0119/p/12508839.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes Dashboard 可视化插件部署 博主亲自实践可用
- Jmeter接口压测示例
- Kubernetes_v1.18.2环境搭建 博主亲自实践可用
- CVE-2020-9484:Tomcat Session 反序列化复现
- Jmeter系列之no-gui模式
- Pytest之基本介绍
- 企业常用的几种发布方式(蓝绿发布 | 滚动升级 | 金丝雀发布)
- 微信小程序的生命周期学习笔记-应用篇
- matplotlib基础绘图命令之plot
- Qt官方示例-样式表
- 入坑 LinkedList,i 了 i 了
- Elasticsearch 利用API进行搜索
- 通过 Serverless Regsitry 快速开发与部署一个 WordCount 实例
- 聊聊dubbo-go的gracefulShutdownFilter
- 强烈推荐:2020年15道优秀的TypeScript练习题 (上集)