磊磊零基础打卡算法:day16 c++ Trie树
5.19
Trie树:
用处:快速的查找和高效存储字符串集合的数据结构。

类似如此的查找,存储
其简单的两个操作:插入和删除
插入:
void insert(char str[]) {
int p;
//定义数据前一位的位置
for (int i = 0; i < str[i]; i++) {
int u = str[i] - 'a';
//初始化映射
if (!son[p][u])
//如果找不到上一个结点
son[p][u] = ++idx;
//那么就去创建一个结点
p = son[p][u];
//每次遍历向下,并且它的上一个是idx指针
}
cnt[p]++;
//结束时的标记,也是记录以此节点结束的字符串个数
}
删除
int query(char str[]) {
int p;
for (int i = 0; i < str[i]; i++) {
int u = str[i] - 'a';
if (!son[p][u])
return 0;
p = son[p][u];
//直接每次遍历向下
}
return cnt[p];
}
例题:https://www.acwing.com/problem/content/837/
#include "iostream"
using namespace std;
const int N = 100010;
int son[N][26], cnt[N], idx;
void insert(char str[]) {
int p;
for (int i = 0; i < str[i]; i++) {
int u = str[i] - 'a';
if (!son[p][u])
son[p][u] = ++idx;
p = son[p][u];
}
cnt[p]++;
}
int query(char str[]) {
int p;
for (int i = 0; i < str[i]; i++) {
int u = str[i] - 'a';
if (!son[p][u])
return 0;
p = son[p][u];
}
return cnt[p];
}
int main() {
int m;
cin >> m;
char str[N];
while (m--) {
char s;
cin >> s;
if (s == 'I') {
cin >> str;
insert(str);
} else if (s == 'Q') {
cin >> str;
cout << query(str) << endl;
}
}
return 0;
}
解释图片:
图片来源:AcWing 835. Trie字符串统计 - AcWing
磊磊零基础打卡算法:day16 c++ Trie树的更多相关文章
- 零基础学C#算法(零基础学算法——C#版)
今天本人正在看算法方面的书.作为高中数学忘得差不多的渣渣,实在无力.无奈找了本书,c语言写的,哎.我就把其中代码翻译成C#版好了.此坑能否填平,看我耐性和网络支持条件吧.有生之年能看完的话我会把整个项 ...
- 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础
---layout: posttitle: 2018-02-03-PY3下经典数据集iris的机器学习算法举例-零基础key: 20180203tags: 机器学习 ML IRIS python3mo ...
- Android零基础入门第71节:CardView简单实现卡片式布局
还记得我们一共学过了多少UI控件了吗?都掌握的怎么样啊. 安卓中一些常用控件学习得差不多了,今天再来学习一个新的控件CardView,在实际开发中也有非常高的地位. 一.CardView简介 Card ...
- 【零基础学习iOS开发】【转载】
原文地址:http://www.cnblogs.com/mjios/archive/2013/04/24/3039357.html 本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开 ...
- 李洪强iOS开发之【零基础学习iOS开发】【01-前言】01-开篇
从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过IT领域,也不管你是理科生还是文科生,只要你对iOS开发感兴趣,都可以来阅读此专题.我尽量以通俗易懂的语言,让每个人都能够看懂 ...
- 【零基础学习iOS开发】【01-前言】01-开篇
本文目录 一.什么是iOS 二.主流手机操作系统 三.什么是iOS开发 四.学习iOS开发的目的 五.学习iOS开发的前提 从今天开始,我就开始更新[零基础学习iOS开发]这个专题.不管你是否涉足过I ...
- 零基础一年拿下BAT三家offer
背景 1.本人本科一本双非垫底的那种,硕士211.本硕电子通信,完全0基础,转行一年. 2.研一上第一学期上课+外派到老师合作公司写MATLAB.去年4月开始学习Java. 起步 1.实话说,刚决定转 ...
- 【雕爷学编程】MicroPython动手做(07)——零基础学MaixPy之机器视觉
机器视觉 machine vision机器视觉是人工智能正在快速发展的一个分支.机器视觉作为生产过程中关键技术之一,在机器或者生产线上,机器视觉可以检测产品质量以便将不合格的产品剔除,或者指导机器人完 ...
- 快快使用ModelArts,零基础小白也能玩转AI!
摘要: 走过路过不要错过,看Copy攻城狮如何借力华为云ModelArts玩转AI. "自2018年10月发布以来,ModelArts累计服务了众多行业十几万开发者,通过基础平台的完备性和面 ...
- 零基础的Java小白如何准备初级开发的面试
对于各位Java程序员来说,只要能有实践的机会,哪怕工资再低,公司情况再一般,只要自己上心努力,就可能在短时间内快速提升,甚至在工作2年后进大厂都有希望,因为项目里真实的开发实践环境是平时学习不能模拟 ...
随机推荐
- ICPC2020 沈阳
F-Kobolds and Catacombs 牛客网 题意:对于\(n(n<=10^6)\)个数的序列,划分区间,每个区间内部从小到大排序,要求最后整个序列单调不下降,求最多可以划分为多少个区 ...
- PPT导出高分辨率tif图片——用于学术论文
PPT导出的图片默认分辨率只有96dpi,但要到印刷品要求的图片分辨率最好是300dpi,学术论文也需要高清晰度的图片.要让PPT导出的图片分辨率达到300dpi,其实可以不用PS,直接修改系统注册表 ...
- 【ZYNQ学习】各个主题的值得看的博客
在学习ZYNQ时会遇到不少问题,这时我们一方面要在DocNav找Xilinx的官方文档,另一方面要参考别人的一些记录的解决好的办法,我在学习的时候看到了不少大佬的博客,给我带来了很大帮助.在这篇博客, ...
- oracle删除表空间报ORA-22868
1.删除表空间报ora-22868问题,该表空间包含其他表空间的表的大字段. 思路:要么把字段迁移走,要么把表清理了. 2.处理方法一:将大字段迁移到其他表空间 select 'alter table ...
- Profiler中WaitForTargetFPS详解【转】
WaitForTargetFPS 该参数一般出现在 CPU开销过低,且通过设定了目标帧率的情况下(Application.targetFrameRate).当上一帧低于目标帧率时,将会在本帧产生一个W ...
- jdk版本与项目依赖jar包不兼容
这两天出现了一个 java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 tomcat启动出现这个问题的原 ...
- flutter-android
多端开发框架 含义:通过一套代码编译成在 H5/微信小程序/React Native/百度小程序/支付宝小程序等端运行的代码. 技术简介:Taro,uniapp Taro是一个开放式跨端跨框架解决方案 ...
- cam对象类型
//此函数的功能是打印当前坐标系试图的所有坐标系名称 static void geom_list_name(tag_t group_tag) { //ask_member_list int count ...
- python + selenium 常用公共方法封装
selenium 环境配置及浏览器驱动的安装:https://www.cnblogs.com/gancuimian/p/16435300.html uiautomator2 常用公共方法封装见之前的帖 ...
- 招新题流程简介(WS2812)
22物电科协软件招新题学习流程 有错误或者不当的地方请在评论区指出 题目简介 使用stm32驱动单一ws2812b灯珠实现呼吸灯效果,驱动及实现方法不限 演示效果 快速入门,在stm32核心板上点灯 ...