您的位置:首页 > 其它

HDU 1075 What Are You Talking About(字典树模板题)

2015-08-14 10:23 579 查看
题目链接

问题:输入一段英文,对照给的单词的映射,输出映射后的字符串


思路:这是字典树水题,只要对插入字典书中的单词标号,然后再根据标号的单词去找相对应的单词就好..............最需要注意的是,hello插入字典树后,如果查找hell应该是返回0的。这里需要对单词末尾进行标记................

AC代码如下:

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
struct node
{
    bool flag;
    string s;
    node *next[26];
    node()
    {
        flag=0;
        memset(next,0,sizeof(next));
    }
};
node *p,*root;
void Insert(string s,string v)
{
    p=root;
    for(int i=0;i<s.size();i++)
    {
        int id=s[i]-'a';
        if(p->next[id]==NULL) p->next[id]=new node();
        p=p->next[id];
    }
    p->flag=1;
    p->s=v;
}
string Query(string s)
{
    p=root;
    for(int i=0;i<s.size();i++)
    {
        int id=s[i]-'a';
        if(p->next[id]==NULL) return "";
        p=p->next[id];
    }
    if(p->flag==0) return "";
    return p->s;
}
int main()
{
    root=new node();
    string s,v;
    cin>>s;
    while(cin>>s&&s!="END")
    {
        cin>>v;
        Insert(v,s);
    }
    cin>>s;
    getline(cin,s);
    while(getline(cin,s)&&s!="END")
    {
        for(int i=0;i<s.size();i++)
        {
            v="";
            while(s[i]>='a'&&s[i]<='z') v+=s[i++];
            string f=Query(v);
            if(f=="") cout<<v<<s[i];
            else cout<<f<<s[i];
        }
        cout<<endl;
    }
    return 0;
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: