给一些串,问每个串的唯一前缀,若不存在输出本身
#include<iostream>
#include <cstring>
#include <algorithm>
using namespace std ;
const int N =1e5;
int ch[N][30],tot,val[N];
void insert(char *s){
int i,u=1;
int n=strlen(s);
for(i=0;i<n;i++){
int c=s[i]-'a';
if(ch[u][c]==0){
ch[u][c]=++tot;
}
u=ch[u][c];
val[u]++;
}
}
void find(char *s){
int i,u=1;
int n=strlen(s);
for(i=0;i<n;i++){
int c=s[i]-'a';
u=ch[u][c];
cout<<s[i];
if(val[u]==1){ break; }
}
}
char word[N][50];
int main(){
int cnt=0;
tot=1;
while(scanf("%s",word[cnt])!=EOF)
insert(word[cnt++]);
for(int i=0;i<cnt;i++){
printf("%s ",word[i]);
find(word[i]);
printf("\n");
}
return 0;
}
浙公网安备 33010602011771号