zoukankan      html  css  js  c++  java
  • (基础)--- Trie树

    什么是Trie树

    trie,又称前缀树或字典樹,是一种有序树,用于保存关联数组,其中的键通常是字符串。 与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。 一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。

    Trie字符串统计

    #include<iostream>
    
    using namespace std;
    
    const int N = 1e5+10;
    
    int son[N][26] , cnt[N],idx;//下标是0的点,既是根节点,又是空节点 
    char str[N];
    
    void insert(char str[]){
    	int p = 0;
    	for(int i = 0; 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 = 0;
    	for(int i = 0; str[i]; i ++ ){
    		int u = str[i];
    		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
    ",query(str));
    	}
    	return 0;
    }
    
  • 相关阅读:
    1022 D进制的A+B
    1021 个位数统计
    L1-040 最佳情侣身高差
    Celery--基本使用
    Celery--安装
    Celery--简介
    RabbitMQ--常用命令
    RabbitMQ--RPC实现
    RabbitMQ发布订阅
    RabbitMQ基本使用
  • 原文地址:https://www.cnblogs.com/bingers/p/13550603.html
Copyright © 2011-2022 走看看