给你很多单词求前缀或者求某个前缀出现的次数,很容易想到字典树,这道题一眼就能看出来是字典树。所以也就是模版。
#include<iostream>
using namespace std;
struct node
{
int cnt;
node*next[26];
node()
{
cnt=0;
for(int i=0; i<26; i++)
next[i]=NULL;
}
};
void Creat_Trie(char str[],node *root)
{
int len,i,id;
len=strlen(str);
node *p=root;
for( i=0; i<len; i++){
id=str[i]-'a';
if( p->next[id]==NULL){
p->next[id]=new node();
p->next[id]->cnt=1;
}
else
p->next[id]->cnt++;
p=p->next[id];
}
}
void Query(char str[],node *root)
{
int i,len,id;
node *p=root;
len=strlen(str);
for( i=0; i<len; i++){
id=str[i]-'a';
printf("%c",str[i]);
if( p->next[id]->cnt==1)
break;
p=p->next[id];
}
}
char str[1005][25];
int main()
{
int s,i;
s=0;
node *root=new node();
while( scanf("%s",str[s])!=EOF){
Creat_Trie(str[s],root);
s++;
}
for( i=0; i<=s; i++){
printf("%s ",str[i]);
Query(str[i],root);
printf("\n");
}
// system("pause");
return 0;
}
本文介绍了一种利用字典树(Trie)的数据结构来高效处理字符串集合的方法。通过构建字典树,可以快速查询特定前缀出现的次数或找到最短唯一前缀。文章提供了完整的C++代码实现,并展示了如何进行单词插入和查询操作。
499

被折叠的 条评论
为什么被折叠?



