zoukankan      html  css  js  c++  java
  • poj-2001(字典树)

    题意:给你一堆字符串,我们定义一个字符串可以被缩写成一个字符串(必须是原字符串的前缀),问你每个字符串能辨识的前缀是什么,不能辨识意思是(ab,abc我们缩写成ab);

    解题思路:可以用字典树解决,我们把刚开始的串存进去,然后在询问的时候,如果当前节点的字符只被一个串走过,那么肯定可以辨识;如果遍历完了找不到·,那么输出他自己;

    代码:

    #include<iostream>
    #include<algorithm>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #define maxn 50050
    using namespace std;
    int trie[maxn][30];
    string s[2050];
    string a;
    int cnt[maxn];
    int root;
    int tot;
    void build_trie(string s)
    {
        root=0;
        int slen=s.size();
        for(int i=0;i<slen;i++)
        {
            int id=s[i]-'a';
            if(!trie[root][id])
            {
                trie[root][id]=++tot;
            }
            root=trie[root][id];
            cnt[root]++;
        }
    }
    int query(string s)
    {
        root=0;
        int slen=s.size();
        for(int i=0;i<slen;i++)
        {
            int id=s[i]-'a';
            if(cnt[root]==1)
            {
                return i-1;
            }
            root=trie[root][id];
        }
        return slen-1;
    }
    int main()
    {
        int cot=0;
        while(cin>>a)
        {
            s[++cot]=a;
            build_trie(a);
        }
        for(int i=1;i<=cot;i++)
        {
            int pos=query(s[i]);
            cout<<s[i]<<" ";
            for(int j=0;j<=pos;j++)
                cout<<s[i][j];
            cout<<endl;
        }
    }
    

      

  • 相关阅读:
    用IIS做宿主的WCF服务
    Apache+mono+xsp搭建Linux下的asp.net平台
    web页面中的卡片布局代码
    GridView内的数据循环滚动
    adb 无法启动问题
    User interface
    动态生成linearLayout
    跳转到下一个activity
    android studio 快捷键
    [转]项目失败的经验
  • 原文地址:https://www.cnblogs.com/huangdao/p/9515315.html
Copyright © 2011-2022 走看看