zoukankan      html  css  js  c++  java
  • 算法复习——trie树(poj2001)

    题目:

    题目描述

    给出 n 个单词(1<=n<=1000),求出每个单词的非公共前缀,如果没有,则输出自己。

    输入格式

    输入 N 个单词,每行一个,每个单词都是由 1~20 个小写字母构成。

    输出格式

    输出 N 行,每行由一个空格的两部分,第一部分是输入的单词,第二部分是该单词在所有单词中的非公共前缀,如果没有,则输出自己。

    样例数据 1

    输入  [复制]

     
    carbohydrate 
    cart 
    carburetor 
    caramel 
    caribou 
    carbonic 
    cartilage 
    carbon 
    carriage 
    carton 
    car 
    carbonate

    输出

    carbohydrate carboh 
    cart cart 
    carburetor carbu 
    caramel cara 
    caribou cari 
    carbonic carboni 
    cartilage carti 
    carbon carbon 
    carriage carr 
    carton carto 
    car car 
    carbonate carbona

    题解:

    trie树模板题

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cmath>
    #include<ctime>
    #include<cctype>
    #include<cstring>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=40005;
    struct node
    {
      int son[30],cnt;
    }trie[N];
    char s[1005][25];
    int n,len,tot=0;
    inline void build(char t[])
    {
      int temp=0;
      for(int i=1;i<=len;i++)
      {
        if(!trie[temp].son[t[i]-'a'])
          trie[temp].son[t[i]-'a']=++tot;
        temp=trie[temp].son[t[i]-'a'];
        trie[temp].cnt++;
      }
    }
    inline void find(char t[])
    {
      int temp=0;
      for(int i=1;i<=len;i++)
      {
        cout<<t[i];
        if(trie[trie[temp].son[t[i]-'a']].cnt==1)  return;  
        temp=trie[temp].son[t[i]-'a'];
      }
    }
    int main()
    {
      //freopen("a.in","r",stdin);
      while(scanf("%s",s[++n]+1)!=EOF)
      {
        len=strlen(s[n]+1);
        build(s[n]);
      }
      for(int i=1;i<=n;i++)
      {
        printf("%s ",s[i]+1);len=strlen(s[i]+1);
        find(s[i]);
        cout<<endl;
      }
      return 0;
    }
  • 相关阅读:
    tomcat自启动的最简单的方法
    Eclipse引入DTD文件
    MyBatis框架之基本知识介绍
    【转】Linux系统安装Redis详细过程
    Spring MVC + Spring + MyBatis 框架整合
    Spring框架之IoC和AOP
    Mysql 时间相关
    【转】Spring事务详解
    Spring的注解问题
    关于Calendar的一些用法总结
  • 原文地址:https://www.cnblogs.com/AseanA/p/7487034.html
Copyright © 2011-2022 走看看