数据结构(一)Trie字符串统计

news2024/10/7 16:21:54

目录

                                                代码 


(一)输入cat

son[p][u],p表示儿子,u表示第几个儿子

0的根的节点编号为idx

--------------------------------------------------------

根是0的有个儿子c,编号为1的节点有个子节点为a,a的编号是2,a相当于父节点。

2的子节点为编号3(t)

3的子节点没有了。cnt++

 (二)在输入cash,p从1开始,idx还是3

son用来交换的

c有,son也重新来=1,p=1

a也有,son=2,p=2

a下找s有没有,没,idx变为4

                                                代码 

写入每一格编号

#include<iostream>
using namespace std;

const int N=100010;

int son[N][26],cnt[N],idx;
char str[N];

void insert(char *str){
    int p=0;
    for(int i=0;str[i];i++){                              //一个个取出来
        int u=str[i]-'a';                                 //u成为行,
        if(!son[p][u]) son[p][u]=++idx;//!son[p][u]为son不等于零,就idx全局++,返回增值后的值
        p=son[p][u];//2对应的新加的字母u有没有,没有给p    //p=son[p][u]儿子变成父亲
    }
    cnt[p]++;                                             //是一个单词,cnt统计字符串数量
}
int query(char *str){
   int p=0;
    for(int i=0;str[i];i++){
        int u=str[i]- 'a';
        if(!son[p][u]) return 0;
        p =son[p][u];
        printf("%d%d%d",cnt[p],str[i],idx);
    }
    return cnt[p];                      //统计字符串数量
}
int main(){
    int m;
    cin>>m;
    while(m--){
        char op[2];
        scanf("%s%s",op,str);
        if(*op== 'I') insert(str);
        else printf("%d\n", query(str));
        
    }    
    return 0;
}
//注:I就不返回,Q才有返回值
//注:op命令,str插入的

// 5
// I abc
// Q abc
// 1
//  Q ab
// 0
//  I ab
// Q ab
// 1
  1. son[p][u] 表示在Trie树中节点 p 的第 u 个儿子,其中 u 的范围是 0 到 25,对应于小写字母表中的每个字母。
  2. cnt[p] 表示以 son[p] 结尾的字符串的数量。
  3. insert(char *str)如果当前字符在 son[p] 中不存在,则创建一个新的节点,并将其添加到 son[p] 中。然后,将当前节点更新为新创建的节点,并将以新节点结尾的字符串数量加一。
  4. query(char *str)如果存在,则将当前节点更新为该儿子节点,并返回以该节点结尾的字符串的数量。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/973768.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SegNeXt学习记录(一):配置环境 测试代码

安装配置MMSegmentation环境 为了验证 MMSegmentation 和所需的环境是否安装正确&#xff0c;我们可以运行示例 python 代码来初始化分段器并推断演示图像&#xff1a; from mmseg.apis import inference_segmentor, init_segmentor import mmcvconfig_file configs/pspnet/…

一辆新能源汽车的诞生之旅:比亚迪常州工厂探营

作为在新能源汽车领域首屈一指的国产品牌&#xff0c;比亚迪近年来可以说是捷报频传&#xff0c;高奏凯歌。 以比亚迪常州工厂为例&#xff0c;据介绍该工厂当初规划设计时定下的生产目标&#xff0c;是年产量能够达到20万辆。然而在2023年上半年&#xff0c;该工厂光是主要销往…

美元的吸血鬼攻击

今日荐读&#xff1a;9.3教链内参《摩根大通认为SEC将被迫批准现货ETF》。刘教链Pro《为什么我写了PGP》。 * * * 刘教链 原创 * * * 自2022年3月16日美联储议息会议后决定开始加息25bp以来&#xff0c;今天&#xff08;2023.9.4&#xff09;已经是本轮加息周期的第537天。在…

网络编程面试题

计算机网络体系结构 在计算机网络的基本概念中&#xff0c;分层次的体系结构是最基本的。计算机网络体系结构的抽象概念较多&#xff0c;在学习时要多思考。这些概念对后面的学习很有帮助。 网络协议是什么&#xff1f; 在计算机网络要做到有条不紊地交换数据&#xff0c;就…

全栈监控,可视化整个堆栈

IT 管理员能够监## 标题控终端设备已有一段时间了&#xff0c;但随着现代基础架构和向混合云架构的转型&#xff0c;端到端可见性至关重要&#xff0c;混合云环境的行为可能不可预测&#xff0c;因此传统技术通常是不够的。传统基础结构监视方法的最大缺点是缺乏对环境特定部分…

Pandas DataFrame 数据存储格式比较

Pandas 支持多种存储格式&#xff0c;在本文中将对不同类型存储格式下的Pandas Dataframe的读取速度、写入速度和大小的进行测试对比。 创建测试Dataframe 首先创建一个包含不同类型数据的测试Pandas Dataframe。 import pandas as pdimport randomimport stringimport numpy …

详解TCP/IP的三次握手和四次挥手

文章目录 前言一、TCP/IP协议的三次握手1.1 三次握手流程 二、TCP/IP的四次挥手2.1 四次挥手流程 三、主要字段3.1、标志位&#xff08;Flags&#xff09;3.2、序号&#xff08;sequence number&#xff09;3.3、确认号&#xff08;acknowledgement number&#xff09; 四、状态…

如何让图片动起来?拿捏这个方法轻松做到

现在&#xff0c;越来越多的人开始使用手机来制作动态图片&#xff0c;因为手机上的应用程序使得这个过程变得简单而有趣。下面我们来探讨一些如何让图片动起来的方法以及在手机上制作时需要注意的事项。 制作动态图片的方法 首先我们先准备好需要制作动态特效的图片&#xff…

Wireshark抓包常用指令

1.常用过滤规则 指定源地址&#xff1a; ip.src 10.0.1.123ip.src 10.0.1.123 && udphttp数据链路层&#xff1a;筛选mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26筛选源mac地址为04:f9:38:ad:13:26的数据包----eth.src 04:f9:38:ad:13:26网…

Python 之 match 表达式

Python 从 3.10 版本开始增加了 match 语句&#xff0c;和其他语言常见的 switch 语句极其相似&#xff0c;但功能更加强大。 本文通过实例&#xff0c;了解下其用法。 基本的 match 语句 def http_code(status): match status: case 400 | 404 | 418: …

STL ---- vector 使用

单纯的使用vector不和algorithm连用. vector自带的方法: push_back(num) pop_back() push_back 添加元素, pop_back删除元素.添加和删除都是在末尾添加和删除的. void assign(const_iterator first,const_iterator last); // 相当于拷贝函数 void assign(size_type n,const…

长胜证券:创业板上市容易吗?

创业板是我国股市的一个板块&#xff0c;特点是适合一些新式企业在股市进行融资。与A股比较&#xff0c;创业板上市门槛相对较低&#xff0c;整个上市过程相对简单和方便&#xff0c;似乎对于草创企业来说十分有利。但是&#xff0c;实际上&#xff0c;创业板上市虽然相对简单&…

陶氏公司将出席2023第二届中国汽车碳中和峰会

2023第二届中国汽车碳中和峰会将于10月19日-20日在上海举办。 本次峰会将为行业领导者、政策制定者和专家提供一个平台&#xff0c;讨论汽车行业减少碳排放的策略。专家们将从政策、供应链、ESG、替代能源解决方案、汽车材料创新、法律等不同领域分享碳中和与可持续策略。 通…

HDFS HA 高可用集群搭建详细图文教程

目录 一、高可用&#xff08;HA&#xff09;的背景知识 1.1 单点故障 1.2 如何解决单点故障 1.2.1 主备集群 1.2.2 Active、Standby 1.2.3 高可用 1.2.4 集群可用性评判标准&#xff08;x 个 9&#xff09; 1.3 HA 系统设计核心问题 1.3.1 脑裂问题 1.3.2 数据状…

项目(智慧教室)第三部分,人机交互在stm32上的实现

一。使用软件 1.stm32cubemx中针对汉字提供的软件 2.对数据进行处理 2.上面点击ok--》这里选择确定 3.这里选择保存即可由字符库&#xff0c;但是需要占用内存太大&#xff0c;需35M&#xff0c;但是stm32只有几百k&#xff0c;所以需要自己删减。 生成中文字符&#xff08;用…

UML基础

统一建模语言&#xff08;UML是 Unified Modeling Language的缩写, 是用来对软件系统进行可视化建模的一种语言。UML为面向对象开发系统的产品 进行说明、可视化、和编制文档的一种标准语言。 共有9种图 UML中的图其实不止九种 (相同的图还可能会有不同的名称), 这里的九种图是…

写字楼远程预付费抄表系统

写字楼远程预付费抄表系统是一种现代化的智能抄表解决方案&#xff0c;具有许多优点&#xff0c;例如&#xff1a;提高抄表效率&#xff0c;降低人力成本&#xff0c;减少误差&#xff0c;防止偷漏电等问题。下面就由小编来为大家来讲解下写字楼远程预付费抄表系统吧&#xff0…

2023年动力电池回收行业研究报告

第一章 行业概况 1.1 定义 动力电池&#xff0c;通常指用于驱动电动车辆&#xff08;包括电动汽车、电动自行车、电动滑板车等&#xff09;的电池。这类电池需要具备高能量密度&#xff08;以便在较小的空间和重量下提供更多的能量&#xff09;、高功率密度&#xff08;以便在…

vue3中TCplayer应用

环境win10:vitevue3elementUI 1 安装 npm install tcplayer.js2 使用 <template><div><video id"player-container-id" width"414" height"270" preload"auto" playsinline webkit-playsinline></video>&l…

01-数据类型和转换

数据 定义&#xff1a;对现实生活中事物的抽象描述&#xff0c;在程序世界中一切都采用数据进行描述&#xff0c;程序的执行实际上就是对数据的操作。数据是存储在内存和硬盘中的。 数据类型 基本数据类型&#xff1a; 数字&#xff08;number)、字符串&#xff08;string&…