给你很多单词求前缀或者求某个前缀出现的次数,很容易想到字典树,这道题一眼就能看出来是字典树。所以也就是模版。
#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;
}