zoukankan      html  css  js  c++  java
  • #Trie Trie字典树

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    using namespace std;
    int trie[100050][26];
    int num[1000010];
    int pos=1;//新建节点时用的序数,也就是已有的节点的序数(1 2 3...p);注意pos必须是1,0的话相当于放弃第一个节点
    void Insert(string str){
    	int c=0;//c代表字典序,pos 
    	for(int i=0;i<str.size();i++){//遍历字符串 
    		int n=str[i]-'a';//字符转化为数值; 
    		if(trie[c][n]==0)//第c行里没有出现过n的时候 字典里没有出现的时候 
    			trie[c][n]=pos++;//用pos新建节点(第c行的第n节点的下一个节点位置是pos) 
    		c=trie[c][n];//c变为第c行的第n个数,模拟字典遍历 
    		++num[c];//c(某节点,某前缀的出现次数)的出现次数+1;在这里出现就是记录前缀出现次数 
    	} 
    //		num[c]++;//c的出现次数+1; //在这里出现就是记录字符串出现次数。 
    }
    int Find(string str){
    	int c=0;
    	for(int i=0;str[i];i++){
    		int n=str[i]-'a';
    		if(trie[c][n]==0)//trie[c][n]是位置,为0代表没有; 
    			return 0;
    		c=trie[c][n];
    	}
    	return num[c];
    }
    int main(){
    	memset(num,0,sizeof(num)); 
    	string str;
    	while(getline(cin,str)){//不断读入,插入; 
    		if(!str.size()) break;
    		Insert(str);//插入函数; 
    	}
    	while(getline(cin,str)) cout<<Find(str)<<endl;
    	return 0;
    }
    
  • 相关阅读:
    @SneakyThrows
    docker部署elasticsearch
    docker部署rabbitmq
    docker部署minio
    docker 部署 jenkins
    linux 根据文件名全局查找位置
    docker 容器与宿主机之间文件拷贝
    excel 查看当前单元格是否存在某一列
    机器学习sklearn
    一些博客链接
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026718.html
Copyright © 2011-2022 走看看