题目大意: 求出以某字符串为前缀的单词的数量
解决:trie树
#include <iostream>
#include <cstring>
using namespace std;
struct node
{
int cnt;
int next[26];
};
node trie[3000000];
int top=0;
void init()
{//初始化字典树,0号为根节点,只需将next值置为0就行了
memset(trie[0].next,0,sizeof(trie[0].next));
top=1;
}
void insert(char *str)
{
int i=0,id;//i为根节点
while(*str)
{
id=*str-'a';
if(trie[i].next[id]==0)
{//若为空,开辟新空间,并初始化新空间
trie[i].next[id]=top;
trie[top].cnt=1;
memset(trie[top].next,0,sizeof(trie[top].next));
top++;
i=trie[i].next[id];
}
else
{//若不空,指向下一个地址,并对下一个地址的元素操作
i=trie[i].next[id];
trie[i].cnt++;
}
str++;
}
}
int search(char *str)
{
int i=0,id;
while(*str)
{
id=*str-'a';
if(trie[i].next[id]==0)return 0;
i=trie[i].next[id];
str++;
}
return trie[i].cnt;
}
int main()
{
char str[15];
init();
while(gets(str),strcmp(str,"")!=0)insert(str);
while(~scanf("%s",str))printf("%d\n", search(str));
// system("pause");
return 0;
}
浙公网安备 33010602011771号