字典树——POJ2001

Posted helman

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典树——POJ2001相关的知识,希望对你有一定的参考价值。

题目链接

从没遇到过这样的题,居然不给字符串的个数

输出前缀的方法也没见过

就是string一个空字符串,然后用string类的加法

思路倒是很简单,建字典树,每一个字符串的每一个字符sum++

如果sum==1说明这个字符只有你经过,没有和其他字符串重叠,那就可以

题目代码

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<sstream>
using namespace std;
const int maxn=2e4+7;
char str[1007][30];
int cnt,tot,sum[maxn],tree[maxn][30];
void insert(char *s)
    int len=strlen(s);
    int root=0;
    for(int i=0;i<len;i++)
        int id=s[i]-a;
        if(!tree[root][id])tree[root][id]=++tot;
        sum[tree[root][id]]++;
        root=tree[root][id];
    

string find(char *s)
    string ans="";
    int len=strlen(s);
    int root=0;
    for(int i=0;i<len;i++)
        int id=s[i]-a;
        ans+=s[i];
        root=tree[root][id];
        if(sum[root]==1)return ans;
    
    return ans;

int main()
    while(scanf("%s",&str[cnt])!=EOF)
        insert(str[cnt]);
        cnt++;
    
    for(int i=0;i<cnt;i++)
        string ans=find(str[i]);
        printf("%s %s\n",str[i],ans.c_str());
    
    return 0;

 

以上是关于字典树——POJ2001的主要内容,如果未能解决你的问题,请参考以下文章

字典树(trie树)学习总结(例题讲解:POJ2001,HDU1251,HDU4825)

第五周周报

[POJ] #1003# 487-3279 : 桶排序/字典树(Trie树)/快速排序

hdu杭电1671 / poj3630 字典树

POJ3630-Phone List-(字典树)

POJ 3764 (异或+字典树)