2.数据结构:1.Tire 字符串统计

1.Tire 字符串统计

cpp 复制代码
#include<algorithm>
#include<cstring>
#include<iostream>

using namespace std;

const int N=100010;
int son[N][26];//至多 N 层,每一层至多 26 个节点(字母)
int cnt[N];//字符串至多 N 个,标记每个字符串的最后一个字母,
//统计出现次数
int idx;//用到的节点的总数
char str[N];//单次输入的字符串

void insert(char str[]){
    int p=0;//根节点
    for(int i=0;str[i];i++){//字符串的每一个字母分别存在每一层
        int u=str[i]-'a';//把 a-z 映射到 0-25
        if(!son[p][u]){//假设该节点不存在
            son[p][u]=++idx;//把该节点构造出来
        }
        p=son[p][u];//走到下一层的节点
    }
    cnt[p]++;//标记字符串的最后一个字母,维护计数器
}

//查询和插入同理,不再赘述
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];
    }
    return cnt[p];
}

int main(){
    int n;
    cin>>n;
    
    while(n--){
        char op[2];
        cin>>op>>str;
        if(op[0]=='I'){
            insert(str);
        }else{
            printf("%d\n",query(str));
        }
    }
    
    return 0;
}
相关推荐
phltxy7 分钟前
ArrayList与顺序表
java·算法
草莓熊Lotso41 分钟前
【数据结构初阶】--排序(一):直接插入排序,希尔排序
c语言·数据结构·经验分享·其他·排序算法
小拇指~1 小时前
梯度下降的基本原理
人工智能·算法·计算机视觉
小徐不徐说1 小时前
C++ 模板与 STL 基础入门:从泛型编程到实战工具集
开发语言·数据结构·c++·qt·面试
艾莉丝努力练剑1 小时前
【C/C++】类和对象(上):(一)类和结构体,命名规范——两大规范,新的作用域——类域
java·c语言·开发语言·c++·学习·算法
TDengine (老段)2 小时前
TDengine 中 TDgp 中添加机器学习模型
大数据·数据库·算法·机器学习·数据分析·时序数据库·tdengine
Tisfy3 小时前
LeetCode 2411.按位或最大的最小子数组长度:一次倒序遍历
数据结构·算法·leetcode·题解·位运算·遍历
2202_756749693 小时前
04 基于sklearn的机械学习-梯度下降(上)
人工智能·算法·机器学习
草莓爱芒果3 小时前
Spring Boot中使用Bouncy Castle实现SM2国密算法(与前端JS加密交互)
java·spring boot·算法