给一些串,问每个串的唯一前缀,若不存在输出本身
#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; }
标签:int,Prefixes,2001,POJ,include,Shortest From: https://www.cnblogs.com/towboa/p/17157474.html