给一些串,问每个串的唯一前缀,若不存在输出本身

 

 

#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;
}

 

posted on 2023-02-26 19:55  towboat  阅读(11)  评论(0)    收藏  举报