首页 > 其他分享 >字典树

字典树

时间:2023-09-10 16:45:40浏览次数:21  
标签:str int char maxn && 字典

#include<bits/stdc++.h>
#define maxn 3000005
using namespace std;
int n,q,id;
int trie[maxn][65],cnt[maxn];
char str[maxn];

int getnum(char x){
    if(x>='A'&&x<='Z')
        return x-'A';
    else if(x>='a'&&x<='z')
        return x-'a'+26;
    else
        return x-'0'+52;
} 

void build(char a[])
{
	int p = 0;
	int len = strlen(a);
	for(int i = 0;i < len;i++)
	{
		int x = getnum(a[i]);//索引
		if(trie[p][x] == 0)
			trie[p][x] = ++id;//如果子节点不存在,则创造一个新的节点 
		p = trie[p][x];//移动到下一个节点 
		cnt[p]++;//字母出现的次数++ 
	}
	//cnt[p]++;//单词出现的次数++  
}

int find(char s[])
{
	int p = 0,len = strlen(s);
	for(int i = 0;i < len;i++)
	{
		int c = getnum(s[i]);
		if(!trie[p][c])//如果子节点不存在,则单词不存在 
			return 0;
		p = trie[p][c];//移动到下一个节点 
	}
	return cnt[p];//返回出现次数 
}

int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		//初始化 
		for(int i = 0;i <=id;i++)
		{
			for(int j = 0;j <=150;j ++)
			{
				trie[i][j] = 0;
			}
		}
		for(int i = 0; i <= id;i++)
			cnt[i] = 0;
		id = 0;
		
		cin>>n>>q;	
		for(int i = 1; i<= n;i ++)
		{
			cin>>str;
			build(str);
		}
		for(int i = 1;i <= q;i ++)
		{
			cin>>str;
			printf("%d\n",find(str));
		 } 
	} 
	return 0;
}

标签:str,int,char,maxn,&&,字典
From: https://www.cnblogs.com/narcissusyl/p/17691456.html

相关文章

  • ⑥初识python--python的字典与集合
    python的字典与集合一、字典的定义与访问1、为什么需要字典思考1:如果有多个数据,例如:'Tom','男',20,如何快速存储?答:列表,元组list1=['Tom','男',20]思考2:如何查找到数据"Tom"?答:查找到下标为0的数据即可。list1[0]思考3:如果将来顺序发生变化,如下所示,还能通过list1[0]访......
  • python进阶 day08字典数据类型内置方法
    字典数据类型内置方法1.作用对于值添加描述信息使用他2.定义方式用{}以逗号隔开加入键值对:key:valueinfo_dict={'name':'wangdapao','age':18,'height':120,'gender':'female','hobby_list':['dapao','basketball'......
  • 字典数据类型内置方法
    作用对于值添加描述信息使用它定义方法用{}以逗号隔开加入键值对key:valueinfo_dict={'name':'hanyingshuo','age':16,'height':175,'hobby_list':['dapao','anqu','jimi']}内置方法优先掌握1.按key取值,即可取也可改变print(in......
  • 单词搜索 II(字典树、数组)、合并两个有序数组(数组、双指针)、验证回文串(双指针、字
    单词搜索II(字典树、数组)给定一个mxn二维字符网格board****和一个单词(字符串)列表words,找出所有同时在二维网格和字典中出现的单词。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一......
  • 字典树 trie
    就是一棵树(完结又回来了......一棵树,每个节点可以表示一个字母likethisPs:p_2是因为画图工具的原因,实际上是p那么,看这颗树。构成这颗树的单词可能不唯一。看下面例子。现在来了一个单次apple。我们发现root(空)的下面没有a,新建一个a,现在发现a的下面没有p,添加p,以此......
  • [转] Linux下的字典生成工具Crunch,创造自己的专属字典
    Crunch是一种创建密码字典工具,按照指定的规则生成密码字典,可以灵活的制定自己的字典文件。使用Crunch工具生成的密码可以输出到屏幕,保存到文件、或另一个程序。由其在渗透测试需要爆破的时候,字典的编排等直接影响到我们的爆破速度,对整个渗透测试流程起着十分重要的作用。0x00安......
  • pytest.mark.parametrize() 字典
    yaml文件-action:list_orderkeywords:南京-action:list_orderkeywords:郑州-action:list_orderkeywords:西安代码:importjsonimportpprintimportpytestfromSlience.utils.login_utilimportLoginfromSlience.utils.request_utilimpo......
  • Python 字典的合并和值相加
    python实现:字典的合并(相同key的value相加)及字典的输出排序(各种意义下)_python字典合并与排序_Roxannekkk的博客-CSDN博客dict1={'a':2,'b':3}dict2={'a':3,'b':2}dict3={'c':3,'d':7}合并key相同,后一个字典覆盖前一个字典的value;key不同,新增dict1.update(dic......
  • openpyxl模块,把字典存入一个表格
    背景使用python把字典存入一个Excel表格在开发过程中,我们经常需要将数据保存到Excel中以便于后续分析和处理。Python提供了许多库来处理Excel文件,其中最流行的是openpyxl库。安装pipinstallopenpyxl使用fromopenpyxlimportWorkbookdefsave_to_execl(star_dict):......
  • Python 遍历字典的若干方法
    哈喽大家好,我是咸鱼我们知道字典是Python中最重要且最有用的内置数据结构之一,它们无处不在,是语言本身的基本组成部分我们可以使用字典来解决许多编程问题,那么今天我们就来看看如何在Python中遍历字典全文内容:https://realpython.com/iterate-through-dictionary-python/p......