Trie树(字典树)-题解 P2580 【于是他错误的点名开始了】
此题可以用STL中的map做,但是了解一下Trie树这个数据结构也是必须的。
Trie树(又称字典树)有以下特点:
根节点不包含字符,除它之外的每一个节点都包含一个字符。
从根节点到某一节点,路径上经过所有字符连起来为该节点对应字符串
每个节点的子节点包含字符不同,也就意味着字符是可以公用的
于是我们用这样一个结构体表示每一个节点:
在本题中可以用动态数组vector贮存每个子节点
struct node{
char c;//该点对应字符
vector<struct node*>s;//储存儿子
int tag;//标记是否为某一字符串结尾
int rep; //应题目要求判断是否重复
}*root=new struct node;
当然字典树有两个函数必不可少,分别是add(插入)和query(查询)。
具体怎么实现还看代码:
#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <vector>
#include <string>
using namespace std;
struct node{
char c;
vector<struct node*>s;
int tag;
int rep;
}*root=new struct node;
void add(string str)
{
struct node*p=root;
for(int i=0;i<str.length();i++)
{
int j;
for(j=0;j<p->s.size();j++)
if(p->s[j]->c==str[i])break;//如果找到对应公用字符
if(j==p->s.size())//如果遍历完后没找到新建一个
{
struct node *newnode =new struct node;
newnode->c=str[i];
newnode->s.clear();
newnode->tag=0;
newnode->rep=0;
p->s.push_back(newnode);
p=newnode;
}
else p=p->s[j];
}
p->tag=1;//标志此节点为一字符串结尾
}
int query(string str)
{
struct node*p=root;
for(int i=0;i<str.length();i++)
{
int j;
for(j=0;j<p->s.size();j++)
if(p->s[j]->c==str[i])
{break;}
if(j==p->s.size()) //如果遍历完后没找到
return 0;
p=p->s[j];
}
if(p->rep!=3)
{
p->rep=3;return p->tag;//找到的字符可能只是某一前缀而非整个字符串,所以需要一个tag标记
}
else if(p->rep==3)return p->rep;
}
int main()
{
int n,m;
char tag[50];
cin>>n;
root->s.clear();
for(int i=1;i<=n;i++)
{
string str;
cin>>str;
add(str);
}
cin>>m;
for(int i=1;i<=m;i++)
{
string str;
cin>>str;
int flag=query(str);
if(flag==0)puts("WRONG");
else if(flag==1)puts("OK");
else if(flag==3)puts("REPEAT");
}
return 0;
}
Trie树(字典树)-题解 P2580 【于是他错误的点名开始了】的更多相关文章
- 剑指Offer——Trie树(字典树)
剑指Offer--Trie树(字典树) Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种的单词.对于每一个单词,我们要判断他出没出现过,如果出现了,求第一次出现在第几个位 ...
- AC自动机——1 Trie树(字典树)介绍
AC自动机——1 Trie树(字典树)介绍 2013年10月15日 23:56:45 阅读数:2375 之前,我们介绍了Kmp算法,其实,他就是一种单模式匹配.当要检查一篇文章中是否有某些敏感词,这其 ...
- Trie(字典树)
没时间整理了,老吕又讲课了@ @ 概念 Trie即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种,典型应用是统计和排序大量的字符串(不限于字符串) Trie字典树主要用于存储字符串, ...
- 9-11-Trie树/字典树/前缀树-查找-第9章-《数据结构》课本源码-严蔚敏吴伟民版
课本源码部分 第9章 查找 - Trie树/字典树/前缀树(键树) ——<数据结构>-严蔚敏.吴伟民版 源码使用说明 链接☛☛☛ <数据结构-C语言版>(严蔚 ...
- P2580 于是他错误的点名开始了(trie)
P2580 于是他错误的点名开始了 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边搓炉石一边点名以至于有一天他连续点到了某个同学两次,然后正好被路过的校长发现了然后就是一顿欧拉欧拉欧拉 ...
- luogu P2580 于是他错误的点名开始了
luogu P2580 于是他错误的点名开始了 https://www.luogu.org/problem/show?pid=2580 题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 他会一边 ...
- Luogu P2580 于是他错误的点名开始了 Trie树 字典树
字典树裸题.每次插入询问串,查询的时候拿出来直接查,信息保留在节点上. #include <bits/stdc++.h> using namespace std; char s[51]; ...
- [LintCode] Implement Trie 实现字典树
Implement a trie with insert, search, and startsWith methods. Have you met this question in a real i ...
- Trie树|字典树(字符串排序)
有时,我们会碰到对字符串的排序,若采用一些经典的排序算法,则时间复杂度一般为O(n*lgn),但若采用Trie树,则时间复杂度仅为O(n). Trie树又名字典树,从字面意思即可理解,这种树的结构像英 ...
- Trie - leetcode [字典树/前缀树]
208. Implement Trie (Prefix Tree) 字母的字典树每个节点要定义一个大小为26的子节点指针数组,然后用一个标志符用来记录到当前位置为止是否为一个词,初始化的时候讲26个子 ...
随机推荐
- angular中的服务和持久化实现
1.创建服务: ng g service my-new-service 创建到指定目录下面 ng g service services/storage 2.app.module.ts 里面引入创建的服 ...
- Django之数据库对象关系映射
Django ORM基本配置 到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去 ...
- 阶段5 3.微服务项目【学成在线】_day07 课程管理实战_03-新增课程-课程分类查询
2 新增课程 2.1 需求分析 用户操作流程如下: 1.用户进入“我的课程”页面,点击“新增课程”,进入新增课程页面 2.填写课程信息,选择课程分类.课程等级.学习模式等. 3.信息填写完毕,点击“提 ...
- Django和Flask这两个框架对比
Flask 在 Django 之后发布,现阶段有大量的插件和扩展满足不同需要 Django发布于2005年,Flask创始于2010年年中. Django功能大而全,Flask只包含基本的配置, D ...
- jmeter 和 postman 提交 传输类型为 "multipart/form-data" 的传送写法
Charles抓包: 请求参数Chrome抓包: jmeter写法: postman写法: 脚本的写法见 https://www.cnblogs.com/kaibindirver/p/9870900. ...
- python中pop(),popitem()的整理
在python中,列表,字典,有序字典的删除操作有些凌乱,所以决定记录下,以便以后用乱了. 列表: 列表删除有三种方式: l.pop() l.remove() del l[3:8] 已下面的code为 ...
- springboot拦截json后缀的请求,返回json数据
需求:请求list.json返回以下数据 { "jsonResult": { "code": 200, "message": "查 ...
- (十七)Centos之安装配置tomcat8
第一步:下载Tomcat8压缩包 进入 http://tomcat.apache.org/download-80.cgi 下载tar.gz压缩包 第二步:用ftp工具把压缩包上传到/home/data ...
- sehll变量比较
1.比较符号解释 $# 表示提供到shell脚本或者函数的参数总数: $1 表示第一个参数. -ne 表示 不等于 $?是shell变量,表示"最后一次执行命令"的退出状态.0为成 ...
- 为何有DAO与Service层?为何先搞Dao接口在搞DaoImpl实现?直接用不行吗?
转自 http://blog.sina.com.cn/s/blog_4b1452dd0102wvox.html 我们都知道有了Hibernate后,单独对数据的POJO封装以及XML文件要耗损掉一个类 ...