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;
}
相关推荐
Juan_20123 分钟前
P1041题解
c++·算法·题解·搜索
泡沫冰@29 分钟前
数据库(6)
数据结构
晨非辰44 分钟前
【数据结构入坑指南】--《层序分明:堆的实现、排序与TOP-K问题一站式攻克(源码实战)》
c语言·开发语言·数据结构·算法·面试
hansang_IR1 小时前
【题解】P2217 [HAOI2007] 分割矩阵 [记忆化搜索]
c++·数学·算法·记忆化搜索·深搜
Voyager_43 小时前
算法学习记录03——二叉树学习笔记:从两道题看透后序位置的关键作用
笔记·学习·算法
我搞slam8 小时前
快乐数--leetcode
算法·leetcode·哈希算法
WWZZ20258 小时前
快速上手大模型:机器学习3(多元线性回归及梯度、向量化、正规方程)
人工智能·算法·机器学习·机器人·slam·具身感知
东方佑9 小时前
从字符串中提取重复子串的Python算法解析
windows·python·算法
西阳未落10 小时前
LeetCode——二分(进阶)
算法·leetcode·职场和发展
通信小呆呆10 小时前
以矩阵视角统一理解:外积、Kronecker 积与 Khatri–Rao 积(含MATLAB可视化)
线性代数·算法·matlab·矩阵·信号处理