字典树基本题。
代码:
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <cstdlib> using namespace std; #define N 1027 struct node { int count; node *next[30]; }*root; char ss[N][30]; node *create() { node *p; p = (node *)malloc(sizeof(node)); p->count = 1; for(int i=0;i<26;i++) p->next[i] = NULL; return p; } void release(node *p) { for(int i=0;i<26;i++) { if(p->next[i] != NULL) release(p->next[i]); } free(p); } void insert(char *ss) { int i=0,k; node *p = root; while(ss[i]) { k = ss[i++] - 'a'; if(p->next[k] == NULL) p->next[k] = create(); else p->next[k]->count++; p = p->next[k]; } } void search(char *ss) { int i = 0,k,j,flag = 0; node *p = root; while(ss[i] && !flag) { k = ss[i++] - 'a'; p = p->next[k]; if(p->count == 1) { flag = 1; printf("%s ",ss); for(j=0;j<i;j++) printf("%c",ss[j]); printf(" "); } } if(!flag) printf("%s %s ",ss,ss); } int main() { int i=0,j,k; root = create(); while(scanf("%s",ss[i])!=EOF) { insert(ss[i]); i++; } for(j=0;j<i;j++) search(ss[j]); release(root); return 0; }