TRIE树
题目简述:给你n个字符串,实现插入与查询出现多少次操作
原理:用树模拟字符串存储
含泪鼠绘精美例图(下图)
如图所示,右边是要存的字母,左边是存的效果图
我们需要定义一个son[id][]来存储id点的子节点,如果该节点不存在就创建一个
然后再从子节点进行同样的操作直到存储完毕,在末尾处打个标记以防找到未被出现的字符串;
寻找同理,如果搜的节点不存在,直接打断
代码如下
#include
#define QWQ 0
#define N 100010
using namespace std;
int son[N][26],cnt[N],x;
void insert(char str[])//插入
{
int p=0;
for(int i=1;str[i];i++)
{
int u=str[i]-'a';//将其处理为数字
if(!son[p][u]) x++,son[p][u]=x;
p=son[p][u];
}
cnt[p]++;
}
int output(char str[])//输出
{
int p=0;
for(int i=1;i<=str[i];i++)
{
int u=str[i]-'a';
if(son[p][u]==0) return 0;
p=son[p][u];
}
return cnt[p];
}
int main()
{
int n;
memset(cnt,0,sizeof(cnt));
cin>>n;
for(int i=1;i<=n;i++)
{
char a;
char b[N];
cin>>a>>b;
if(a=='I') insert(b);
if(a=='Q')
{
cout<
经典例题:洛谷P2580 于是他错误的点名开始了