DataStructure

HDU-1247-Hat’s Words(字典树)

2019-08-04  本文已影响0人  雨落八千里
Hat’s Words

输出字符串集合中哪些可以由字符串集合中的其他两个字符串组成

#include<bits/stdc++.h>
using namespace std;
const int M=50050;
int tree[M][26];
int vis[M];
int pos=1;
string s;
map<int,string>mp;
void insert(string s)
{
    int len=s.size( );
    int root=0;
    for(int i=0;i<len;i++)
    {
        int x=s[i]-'a';
        if(!tree[root][x])
        {
            tree[root][x]=pos++;
        }
        root=tree[root][x];
    }
    vis[root]=1;
}
bool findprefix(string s)
{
    int len=s.size( );
    int root=0;
    for(int i=0;i<len;i++)
    {
        int x=s[i]-'a';
        if(!tree[root][x])
        {
            return 0;
        }
        root=tree[root][x];
    }
    return vis[root];
}
int main( )
{
    int cnt=0;
    while(cin>>s)
    {
        mp[++cnt]=s;
        insert(s);
    }
    string str1,str2;
    for(int i=1;i<=cnt;i++)
    {
        s=mp[i];
        int len=s.size( );
        for(int j=1;j<len;j++)
        {
            str1=s.substr(0,j);
            str2=s.substr(j);
            if(findprefix(str1)&&findprefix(str2))
            {
                cout<<s<<endl;
                break;
            }
        }
    }
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读