HDU1075 字典树板子题

题意 :给出两组字符串 一一映射,给出一种组成的文字,要求映射成另外一种
思路:使用字典树,把映射的另外一个字符存在字典树的单词节点处  例如 abc   123

则把123存在abc节点中的c处即可

同时这里使用的是静态的数组,操作和写起来都更方便,就是要提前判断开的空间,过大过小都会有莫名其妙的错误

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int maxn=5e5+5;
 6 const int size=26;
 7 struct Trie{
 8     int ch[maxn][size];
 9     char str[maxn][20];
10     bool isEnd[maxn];
11     int size;
12     void init(){
13         size=1;
14         memset(ch,0,sizeof(ch));
15         memset(isEnd,0,sizeof(isEnd));
16     }
17     int index(char s){
18         return s-'a';
19     }
20     void insert(char*s1,char*s2){
21         int i,rt;
22         for(i=rt=0;s1[i]!='\0';i++){
23             int c=index(s1[i]);
24             if(ch[rt][c]==0){
25                 ch[rt][c]=size++;
26             }
27             rt=ch[rt][c];
28         }
29         strcpy(str[rt],s2);
30         isEnd[rt]=1;
31     }
32     const char*find(char*s){
33         int i,rt;
34         for(i=rt=0;s[i]!='\0';i++){
35             int c=index(s[i]);
36             if(!ch[rt][c])return "0";
37             rt=ch[rt][c];
38         }
39         return (isEnd[rt])?str[rt]:"0";
40 
41     }
42 }trie;
43 char s1[maxn],s2[maxn];
44 int main(){
45     trie.init();
46 while(scanf("%s",s1)==1){
47     if(!strcmp(s1,"START"))continue;
48     if(!strcmp(s1,"END"))break;
49     scanf("%s",s2);
50     trie.insert(s2,s1);
51 }
52 //cout<<111<<endl;
53 getchar();
54 while(gets(s1)){
55     if(!strcmp(s1,"START"))continue;
56     if(!strcmp(s1,"END"))break;
57     int i=0;
58     while(s1[i]!='\0'){
59     if(s1[i]>='a'&&s1[i]<='z'){
60         int j=0;
61         while(s1[i]!='\0'&&s1[i]>='a'&&s1[i]<='z'){
62             s2[j++]=s1[i++];
63         }
64         s2[j]='\0';
65         const char*temp=trie.find(s2);
66         if(temp[0]=='0')printf("%s",s2);
67         else printf("%s",temp);
68     }
69     else putchar(s1[i++]);
70 //    puts("");
71     }
72 //    puts("");
73     cout<<endl;
74 }
75 return 0;
76 }

 

全部评论

相关推荐

10-21 23:48
蚌埠坦克学院
csgq:可能没hc了 昨天一面完秒挂
点赞 评论 收藏
分享
10-18 13:01
已编辑
西安理工大学 C++
小米内推大使:建议技能还是放上面吧,hr和技术面试官第一眼想看的应该是技能点和他们岗位是否匹配
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 17:16
科大讯飞 算法工程师 28.0k*14.0, 百分之三十是绩效,惯例只发0.9
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务