208 Implement Trie (Prefix Tree) 字典树(前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个方法。
注意:
你可以假设所有的输入都是小写字母 a-z。
详见:https://leetcode.com/problems/implement-trie-prefix-tree/description/
Java实现:
Trie树,又称为字典树、单词查找树或者前缀树,是一种用于快速检索的多叉数结构。例如,英文字母的字典树是26叉数,数字的字典树是10叉树。
Trie树的基本性质有三点,归纳为:
根节点不包含字符,根节点外每一个节点都只包含一个字符。
从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
每个节点的所有子节点包含的字符串不相同。
insert:分析单词的每一个字符,如果存在与已经有的孩子中,则循环转到该孩子节点,否则新建孩子节点,最后在单词的末尾字符isWord标志位true;
search: 逐个分析每个字符,如果不存在该字符的孩子则返回false,否则循环之后,查看末尾字符的标志位即可;
prefix: 和search一样,只是在最后只要是都存在每个字符相应的孩子map,则返回true。
- class TrieNode{
- boolean isWord;
- HashMap<Character,TrieNode> map;
- public TrieNode(){
- map=new HashMap<Character,TrieNode>();
- }
- }
- class Trie {
- private TrieNode root;
- /** Initialize your data structure here. */
- public Trie() {
- root=new TrieNode();
- }
- /** Inserts a word into the trie. */
- public void insert(String word) {
- char[] charArray=word.toCharArray();
- TrieNode tmp=root;
- for(int i=0;i<charArray.length;++i){
- if(!tmp.map.containsKey(charArray[i])){
- tmp.map.put(charArray[i],new TrieNode());//添加
- }
- tmp=tmp.map.get(charArray[i]);//转到孩子节点
- if(i==charArray.length-1){//末尾字符
- tmp.isWord=true;
- }
- }
- }
- /** Returns if the word is in the trie. */
- public boolean search(String word) {
- TrieNode tmp=root;
- for(int i=0;i<word.length();++i){
- TrieNode next=tmp.map.get(word.charAt(i));
- if(next==null){
- return false;
- }
- tmp=next;
- }
- return tmp.isWord;
- }
- /** Returns if there is any word in the trie that starts with the given prefix. */
- public boolean startsWith(String prefix) {
- TrieNode tmp=root;
- for(int i=0;i<prefix.length();++i){
- TrieNode next=tmp.map.get(prefix.charAt(i));
- if(next==null){
- return false;
- }
- tmp=next;
- }
- return true;
- }
- }
- /**
- * Your Trie object will be instantiated and called as such:
- * Trie obj = new Trie();
- * obj.insert(word);
- * boolean param_2 = obj.search(word);
- * boolean param_3 = obj.startsWith(prefix);
- */
C++实现:
- class TrieNode
- {
- public:
- TrieNode *next[26];
- char c;
- bool isWord;
- TrieNode():isWord(false)
- {
- memset(next,0,sizeof(TrieNode*)*26);
- }
- TrieNode(char _c):c(_c),isWord(false)
- {
- memset(next,0,sizeof(TrieNode*)*26);
- }
- };
- class Trie {
- public:
- /** Initialize your data structure here. */
- Trie() {
- root=new TrieNode();
- }
- /** Inserts a word into the trie. */
- void insert(string word) {
- TrieNode *p=root;
- int id;
- for(char c:word)
- {
- id=c-'a';
- if(p->next[id]==nullptr)
- {
- p->next[id]=new TrieNode(c);
- }
- p=p->next[id];
- }
- p->isWord=true;
- }
- /** Returns if the word is in the trie. */
- bool search(string word) {
- TrieNode *p=root;
- int id;
- for(char c:word)
- {
- id=c-'a';
- if(p->next[id]==nullptr)
- {
- return false;
- }
- p=p->next[id];
- }
- return p->isWord;
- }
- /** Returns if there is any word in the trie that starts with the given prefix. */
- bool startsWith(string prefix) {
- TrieNode *p=root;
- int id;
- for(char c:prefix)
- {
- id=c-'a';
- if(p->next[id]==nullptr)
- {
- return false;
- }
- p=p->next[id];
- }
- return true;
- }
- private:
- TrieNode *root;
- };
- /**
- * Your Trie object will be instantiated and called as such:
- * Trie obj = new Trie();
- * obj.insert(word);
- * bool param_2 = obj.search(word);
- * bool param_3 = obj.startsWith(prefix);
- */
208 Implement Trie (Prefix Tree) 字典树(前缀树)的更多相关文章
- 【leetcode】208. Implement Trie (Prefix Tree 字典树)
A trie (pronounced as "try") or prefix tree is a tree data structure used to efficiently s ...
- LeetCode 208 Implement Trie (Prefix Tree) 字典树(前缀树)
Implement a trie with insert, search, and startsWith methods.Note:You may assume that all inputs are ...
- 字典树(查找树) leetcode 208. Implement Trie (Prefix Tree) 、211. Add and Search Word - Data structure design
字典树(查找树) 26个分支作用:检测字符串是否在这个字典里面插入.查找 字典树与哈希表的对比:时间复杂度:以字符来看:O(N).O(N) 以字符串来看:O(1).O(1)空间复杂度:字典树远远小于哈 ...
- [LeetCode] 208. Implement Trie (Prefix Tree) ☆☆☆
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
- 【LeetCode】208. Implement Trie (Prefix Tree)
Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith methods. Note:You ...
- 【刷题-LeetCode】208. Implement Trie (Prefix Tree)
Implement Trie (Prefix Tree) Implement a trie with insert, search, and startsWith methods. Example: ...
- [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)
Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...
- 【LeetCode】208. Implement Trie (Prefix Tree) 实现 Trie (前缀树)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 公众号:负雪明烛 本文关键词:Leetcode, 力扣,Trie, 前缀树,字典树,20 ...
- 208. Implement Trie (Prefix Tree) -- 键树
Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...
随机推荐
- C++卷积神经网络实例:tiny_cnn代码具体解释(6)——average_pooling_layer层结构类分析
在之前的博文中我们着重分析了convolutional_layer类的代码结构.在这篇博文中分析相应的下採样层average_pooling_layer类: 一.下採样层的作用 下採样层的作用理论上来 ...
- Android修改签名
#!/bin/shtmp=~/temp.apkcp "$1" "$tmp"zip -d "$tmp" META-INF/\*jarsigne ...
- (原创)EasyUI中datagrid的行编辑模式中,找到特定的Editor,并为其添加事件
有时候在行编辑的时候,一个编辑框的值要根据其它编辑框的值进行变化,那么可以通过在开启编辑时,找到特定的Editor,为其添加事件 // 绑定事件, index为当前编辑行 var editors = ...
- Hibernate 之 一级缓存
本篇文章主要是总结Hibernate中关于缓存的相关内容. 先来看看什么是缓存,我们这里所说的缓存主要是指应用程序与物流数据源之间(例如硬盘),用于存放临时数据的内存区域,这样做的目的是为了减少应用程 ...
- Java正则表达式的用法
/** * 校验时间格式,正确则返回true * @param xxx * @return */ private static boolean checkDateFormat (String xxx) ...
- Buildroot用户指南【转】
本文转载自:http://www.voidcn.com/blog/bytxl/article/p-4727302.html 第一章 关于Buildroot Buildroot是一个包含M ...
- YTU 1074: You are my brother
1074: You are my brother 时间限制: 1 Sec 内存限制: 128 MB 提交: 10 解决: 7 题目描述 Little A gets to know a new fr ...
- Python之xlsx文件与csv文件相互转换
1 xlsx文件转csv文件 import xlrd import csv def xlsx_to_csv(): workbook = xlrd.open_workbook('1.xlsx') tab ...
- Watir: 右键点击实例(某些如果应用AutoIt来做会更加简单高效)
require 'watir' module Watir class Element def top_edge assert_exists assert_enabled ole_object.getB ...
- 【转】浏览器中输入url后发生了什么
原文地址:http://www.jianshu.com/p/c1dfc6caa520 在学习前端的过程中经常看到这样一个问题:当你在浏览器中输入url后发生了什么?下面是个人学习过程中的总结,供个人复 ...