#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <string>
#include <queue>
#include <map>
#define INF 0x3f3f3f3f3f3f
#define max 500+10
#define ll long long
#define ms(a,b) memset(a,b,sizeof(a))
using namespace std;
const int maxn = 111111;
struct node{
int son[26],size;
}tree[2*maxn];
int cnt;
void insert(char *s){
int n = strlen(s);
int now = 1,val;
for(int i = 0;i < n;i++){
val = s[i]-'a';
if(tree[now].son[val] == 0)//cteate node
tree[now].son[val] = ++cnt;
now = tree[now].son[val];
tree[now].size++;
}
}
int find(char *s){
int n = strlen(s);
int now = 1,val;
for(int i = 0;i<n;i++){
val = s[i]-'a';
now = tree[now].son[val];
if(tree[now].size==1)
return i+1;
}
return n;
}
char str[1111][33];
int len,ans;
int main(){
ms(tree,0);
cnt = 1;
len = 0;
while(cin>>str[++len]&&str[len][0]!='0'){
insert(str[len]);
}
for(int i = 1;i<=len;i++){
ans = find(str[i]);
cout<<str[i]<<" ";
str[i][ans] = '\0';
cout<<str[i]<<"\n";
}
int nnn;
cin>>nnn;
return 0;
}
poj 2001(字典树)
猜你喜欢
转载自blog.csdn.net/Fawkess/article/details/103934021
今日推荐
周排行