Tire树:【摘自百度百科】
简单的来说,就是通过建立一棵树,进行快速查找字符串。
主要思路:1. 初始化:
一科空Tire仅包含一个根节点,该点的字符指针均指向空。【建议定义全局量】
2.插入
3.查找
题目:读入一个整数N,接下来读入N个字符串插入Tire树。读入一个整数M,进行M次查询,每次查询一个字符串;若在Trie中,输出Yes;反之输出No。
代码如下:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int N,M,tot=1;
bool end[10010];
int arr[10010][26];
void insert_(char* str)//向Trie树中插入字符
{
int len=strlen(str),p=1;//p为指针
for(int i=0;i<len;i++)
{
char ch=str[i]-'a';
if(arr[p][ch]==0)arr[p][ch]=++tot;
p=arr[p][ch];
}
end[p]=true;//记录字符串结尾
}
bool search_(char* str)//查找字符串是否存在
{
int len=strlen(str),p=1;
for(int i=0;i<len;i++)
{
char ch=str[i]-'a';
p=arr[p][ch];
if(p==0)return false;
}
return end[p];//查找是否是结尾
}
int main()
{
char str[10010];
cin >> N;
for(int i=1;i<=N;i++)
{
scanf("%s",str);
insert_(str);
}
cin >> M;
while(M--)
{
scanf("%s",str);
if(search_(str))printf("Yes\n");
else printf("No\n");
}
return 0;
}
左岸夜亦冷
【第一次写题解,假的】