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;
    }
  • 相关阅读:
    IDEA插件Mybatis logs不打印Mybatis 或者 Mybatis -plus 的SQL日志
    JRebel启动报错,但不影响正常运行JRebel: ERROR Class 'org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor' could not be processed by .....
    自增运算符 ++
    赋值操作符 =
    逻辑操作符
    算术操作符
    变量类型
    打印,注释,空白
    Java开发环境的安装和配置
    java应用背景
  • 原文地址:https://www.cnblogs.com/AseanA/p/7487034.html
Copyright © 2011-2022 走看看