poj 2001

来源:互联网 发布:电脑桌面美化软件大全 编辑:程序博客网 时间:2024/04/27 20:36
#include <iostream>#include <cstdio>#include <string>#include <algorithm>using namespace std;struct trie{int end;trie *next[26];trie(int var = 0){end = var;for(int i=0;i<26;i++)next[i]=NULL;}};trie *result;string word[1005];void del(trie *head){if(head == NULL) return ;for(int i=0;i<26;i++)del(head->next[i]);delete head;}void add(trie *head ,string a,int i){if(i==a.length()) return ;int index = a[i]-'a';if(head->next[index]==NULL){trie *temp = new trie(1);head->next[index]=temp;add(head->next[index],a,i+1);}else {head->next[index]->end++; add(head->next[index],a,i+1);}}string count(string s){trie *temp = result;string ss="";for(int i=0;i<s.length();i++){int index = s[i]-'a';if(temp->next[index]==NULL) return ss;else if(temp->next[index]->end==1) {ss+=s[i];return ss;}else {ss+=s[i];temp = temp->next[index];}}return ss;}void init(){int k=0;result = new trie();string s;while(cin>>s){word[k++]=s;add(result,s,0);}for(int i=0;i<k;i++)cout<<word[i]<<" "<<count(word[i])<<endl;}int main(){//freopen("in.txt","r",stdin);init();return 0;}

原创粉丝点击