POJ_2001_Shortest Prefixes

题意:给定N个单词的字典,输出N个单词和这N个单词的确定字符串。

#include<iostream>

#include<cstdio>

#include<cstring>

#include<string>

#include<algorithm>

#include<map>

#include<cmath>

using namespace std;

struct Trie  //字典树结构

{

    Trie *child[26];

    int num;   //记录该字母的出现次数

    Trie() //构造函数

    {

        num=0;

        memset(child,0,sizeof(child));

    }

};

Trie *root,*s;

void Create(char *str)  //插入单词

{

    s=root;

    int i=0;

    while(str[i])

    {

        int id=str[i]-'a';

        if(s->child[id]==0) //如果该字母还没有出现在字典中

        {

        s->child[id]=new Trie;

        s=s->child[id];

        }

        else

        {

            s=s->child[id];

            s->num++;

        }

        i++;

    }

}

void Search(char *str)

{

    s=root;

    for(int i=0;i<strlen(str);++i)

    {

        int id=str[i]-'a';

        s=s->child[id];

        printf("%c",str[i]);

        if(s->num==0) break; //如果该字母只出现了一次

    }

    printf("\n");

}

char a[1002][30];

int main()

{

    int i=0,j;

    root=new Trie;

    while(~scanf("%s",a[i]))

    {

        Create(a[i]);

        i++;

    }

    for(j=0;j<i;++j)

    {

        printf("%s ",a[j]);

        Search(a[j]);

    }

    return 0;

}

 

你可能感兴趣的:(test)