题目连接:http://poj.org/problem?id=2001
记录每个字母出现的次数就可以了~
Source Code
Problem: 2001 | User: bingshen | |
Memory: 1220K | Time: 32MS | |
Language: C++ | Result: Accepted |
- Source Code
#include<stdio.h> #include<string.h> struct node { int num; int data[26]; void init(); }; node tire[10000]; char str[1005][21]; int n,loc; void node::init() { this->num=0; } void init() { int i; n=0; loc=2; for(i=0;i<26;i++) tire[1].data[i]=-1; for(i=0;i<10000;i++) tire[i].init(); } void insert(int x) { int i,r=1,index,len,j; len=strlen(str[x]); for(i=0;i<len;i++) { index=str[x][i]-'a'; if(tire[r].data[index]==-1) { tire[r].data[index]=loc; tire[loc].num=1; for(j=0;j<26;j++) tire[loc].data[j]=-1; r=loc; loc++; } else { r=tire[r].data[index]; tire[r].num=tire[r].num+1; } } } void find(int x) { int i,index,len,r=1; len=strlen(str[x]); for(i=0;i<len;i++) { index=str[x][i]-'a'; r=tire[r].data[index]; if(tire[r].num==1) { printf("%c",index+'a'); break; } printf("%c",index+'a'); } printf("/n"); } int main() { int i; init(); while(scanf("%s",str[n])!=EOF) n++; for(i=0;i<n;i++) insert(i); for(i=0;i<n;i++) { printf("%s ",str[i]); find(i); } return 0; }