#include <cstring>
#include <iostream>
#include <map>
#include <cstdio>
using namespace std;
class Trie{
private :
map<char,Trie *> * root;
pair<bool,int> info;
inline Trie * makeNext(char c){
if(root == NULL){
root = new map<char ,Trie * >;
}
map<char, Trie *>::iterator it = root->find(c);
Trie * in ;
if( it == root->end()){
in = new Trie();
root->insert( pair<char , Trie * >(c,in));
}else{
in = it->second;
}
info.second ++ ;
return in;
}
inline void makeEnd(){
info.second ++ ;
info.first = true;
}
inline Trie * getChild(char c){
//该节点后面什么都没有了
if( root == NULL ){
return NULL;
}
map<char, Trie *>::iterator it = root->find(c);
if(it == root->end()){
//有兄弟节点,但是没有这个后续
return NULL;
}
return it->second;
}
void destory(){
if(root != NULL){
for(map<char ,Trie *> :: iterator it = root->begin() ; it!=root->end() ; ++ it ){
it->second->destory();
}
delete root;
}
}
public :
static pair<bool,int> None ;
Trie(){
root = NULL;
info = pair<bool,int>(false,);
}
~Trie(){
destory();
}
void addStr(char * str){
int len = strlen(str);
Trie * nowRoot = this;
while( (*str)!='\0'){
nowRoot = nowRoot->makeNext(*str);
++str;
}
nowRoot->makeEnd();
} pair<bool,int> findStr(char * str){
Trie * nowRoot = this;
while((*str)!='\0'){
nowRoot = nowRoot->getChild(*str);
if( nowRoot == NULL){
return None;
}
str++;
}
return nowRoot -> info;
}
};
pair<bool,int> Trie :: None = pair<bool,int>(false,-);
int main(){
Trie * a = new Trie();
a->addStr("abcdfg");
a->addStr("abcd");
a->addStr("abc");
a->addStr("ab");
cout<<"stop "<<endl;
pair <bool,int> ans = a->findStr("abc");
cout<< ans.first << " " << ans.second<<endl;
delete a;
return ;
}
数据结构 - trie的更多相关文章
-
数据结构—— Trie (前缀树)
实现一个 Trie (前缀树),包含 插入, 查询, 和 查询前缀这三个操作. Trie trie = new Trie(); trie.insert("apple"); trie ...
-
数据结构~trie树(字典树)
1.概述 Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树. 我理解字典树是看了这位大佬博客.还不了解字典树的 ...
-
数据结构 -- Trie字典树
简介 字典树:又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种. 优点:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高. 性质: 1. 根节 ...
-
hiho149周 - 数据结构 trie树
题目链接 坑点:accept和deny的ip可能相同,需加个判断 #include <cstdio> #include <cstdlib> #include <vecto ...
-
【数据结构】Trie树
数据结构--Trie树 概念 Trie树,又称字典树.前缀树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计 ...
-
数据结构 | 30行代码,手把手带你实现Trie树
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是算法和数据结构专题的第28篇文章,我们一起来聊聊一个经典的字符串处理数据结构--Trie. 在之前的4篇文章当中我们介绍了关于博弈论的 ...
-
基于trie树的具有联想功能的文本编辑器
之前的软件设计与开发实践课程中,自己构思的大作业题目.做的具有核心功能,但是还欠缺边边角角的小功能和持久化数据结构,先放出来,有机会一点点改.github:https://github.com/chu ...
-
讲解——Trie树(字典树)
Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...
-
Trie树(转)
原文http://www.cnblogs.com/TheRoadToTheGold/p/6290732.html 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看 ...
-
浅谈Trie树(字典树)
Trie树(字典树) 一.引入 字典是干啥的?查找字的. 字典树自然也是起查找作用的.查找的是啥?单词. 看以下几个题: 1.给出n个单词和m个询问,每次询问一个单词,回答这个单词是否在单 ...
随机推荐
-
一般处理程序返回json
一般处理程序: public void ProcessRequest(HttpContext context) { string action = con ...
-
CoreAnimation-03-隐式动画
简介 每个UI控件,默认自动创建一个图层(根图层),即每个UI控件对应于至少一个图层 可以手动创建图层,这些图层为非根图层 对非根图层的某些属性(标记为Animatable的属性)进行修改,默认会自动 ...
-
Delphi Idhttp Post提交 Aspx/Asp.net 时 500错误的解决办法。
一直使用Delphi写程序,因为习惯了,用起来方便. 但是有一个问题困扰了我半年了.就是使用Idhttp Post提交时候总会有莫名其妙的错误,大部分网站没问题,但是一遇到Asp.net就报错500. ...
-
BZOJ_1612_[Usaco2008_Jan]_Cow_Contest_奶牛的比赛_(dfs)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1612 \(n\)头奶牛比赛,给出一些胜负情况,问可以确定多少头奶牛的排名. 分析 无论胜负,只 ...
-
linux杂记(八)linux压缩与打包
linux系统常见的压缩指令 一般被压缩过的档案,通常其附档名都是[*.tar,*.tar.gz,*.tgz,*.gz,*.Z,*.bz2]等等. *.tar:tar程序打包的数据.并没有压缩过 *. ...
-
HDU1005(周期问题)
Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * ...
-
tornado解决高并发的初步认识牵扯出的一些问题
#!/bin/env python # -*- coding:utf-8 -*- import tornado.httpserver import tornado.ioloop import torn ...
-
Spark技术内幕:Storage 模块整体架构
Storage模块负责了Spark计算过程中所有的存储,包括基于Disk的和基于Memory的.用户在实际编程中,面对的是RDD,可以将RDD的数据通过调用org.apache.spark.rdd.R ...
-
1.2.8 Excel做个滚动抽奖
1.首先要准备好数据库: 2.用RAND函数来生成随机数字,做一个辅助列: 3.制作抽奖界面: 4.输入公式: 在F3中输入下列公式并填充至F5: =INDEX(A:A,MATCH(SMALL(B:B ...
-
[vuejs] vue2.0-layer-mobile移动端弹层
vue2.0-layer-mobile移动端弹层 本次组件升级支持slot内容分发功能,实现高定制内容风格的弹层 安装方法 npm install vue2-layer-mobile -S 初始化 i ...