数组模板
#include<bits/stdc++.h>
#define maxn 1<<20
using namespace std;
int ch[maxn][26],cnt[maxn];
int id;
void insert(char *str)
{
int rt = 0;
int len = strlen(str);
for(int i = 0; i < len; i++)
{
if(!ch[rt][str[i]-'a'])
{
memset(ch[id],0,sizeof(ch[id]));
cnt[id]=0;
ch[rt][str[i]-'a']=id++;
}
rt=ch[rt][str[i]-'a'];
cnt[rt]++;
}
}
int find(char *str)
{
int rt=0;
int len=strlen(str);
for(int i=0;i<len;i++)
{
if(!ch[rt][str[i]-'a']) return 0;
rt=ch[rt][str[i]-'a'];
}
return cnt[rt];
}
指针模板
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct Trie
{
Trie *nxt[26];
int cnt;
Trie()
{
cnt=0;
for(int i=0;i<26;i++)
{
nxt[i]=NULL;
}
}
};
Trie *root = new Trie();
void insert(char *str)
{
int len=strlen(str);
Trie *p=root;
for(int i=0;i<len;i++)
{
if(p->nxt[str[i]-'a']==NULL)
{
p->nxt[str[i]-'a']= new Trie();
}
p=p->nxt[str[i]-'a'];
p->cnt++;
}
}
int search(char *str)
{
int len=strlen(str);
Trie *p=root;
for(int i=0;i<len;i++)
{
if(p->nxt[str[i]-'a']==NULL)return 0;
p=p->nxt[str[i]-'a'];
}
return p->cnt;
}
void Delete(char *str,int v)
{
int len=strlen(str);
Trie *p=root;
for(int i=0;i<len;i++)
{
if(p->nxt[str[i]-'a']==NULL)return;
p=p->nxt[str[i]-'a'];
p->cnt-=v;
}
for(int i=0;i<26;i++)
{
free(p->nxt[i]);
p->nxt[i]=NULL;
}
}