hdu 1247 Hat’s Words Trie树(+测试数据)
2015-08-06 16:45
204 查看
hdu 1247 Hat’s Words Trie树(+测试数据)
题意:在一些字符串中,找到这样字符串:由两个其他的字符串构成(也可能是由同一个单词两次构成 )!
祝猿们AC愉快!第一次写博客....文笔不好。 只因这题虐我伤痕累累,(呜呜~>_<~+)好不容易写出来了,就总结了一下..这也预示着我的博客之旅的开启! √(─皿─)√
自己写的几组测试数据:
Input:
a
aa
aaa
Output:
aa
aaa
Input:
ab
cd
abcdef
abcd
Output:
abcd
题意:在一些字符串中,找到这样字符串:由两个其他的字符串构成(也可能是由同一个单词两次构成 )!
祝猿们AC愉快!第一次写博客....文笔不好。 只因这题虐我伤痕累累,(呜呜~>_<~+)好不容易写出来了,就总结了一下..这也预示着我的博客之旅的开启! √(─皿─)√
自己写的几组测试数据:
Input:
a
aa
aaa
Output:
aa
aaa
Input:
ab
cd
abcdef
abcd
Output:
abcd
#include <iostream> #include <stdio.h> #include <algorithm> #include <math.h> #include <string.h> #define N 26 #define PI acos(-1.0) using namespace std; typedef struct Trie { int sum; int flag; struct Trie *next ; }; Trie *root=NULL; Trie *Newnode()/*初始化树*/ { Trie *p=(Trie *)malloc(sizeof(Trie)); p->sum=0; p->flag=0; for(int i=0; i<N; i++) p->next[i]=NULL; return p; } void creatTire(char *s)/*建树 这个可以作为模版*/ { int i,len=strlen(s); Trie *p=root; for(i=0; i<len; i++) { int k=s[i]-'a'; if(p->next[k]==NULL) p->next[k]=Newnode(); p=p->next[k]; p->sum++; } p->flag=1;/*标记一个字符串的最后一个单词*/ } void del(Trie *p)/*清除树*/ { int i; if(p==NULL) return ; for(i=0; i<N; i++) if(p->next[i]!=NULL) del(p->next[i]); free(p); } int findTire(char *s) { Trie *p=root; int n=strlen(s),i; for(i=0; i<n; i++) { int j,k; k=s[i]-'a'; p=p->next[k]; if(p==NULL) break; if(p->flag==1&&i!=n-1)/*找到了匹配的前半部分*/ { j=i+1; Trie *q=root; for(; j<n; j++) /*找后半部分*/ { k=s[j]-'a'; q=q->next[k]; if(q==NULL) break; if(q->flag==1&&j==n-1)/*j==n-1表示完全匹配*/ return 2;/*返回2说明找到符合题意的了*/ } //return 1;/*在这错了好久,要是找到了前半部分但是没找到匹配的后半部分应该把前半部分的下标向后移,继续判断!*/ } } return 0; } char s[51000][110]; int main() { int n,i=0,j; root=Newnode();/*这儿要注意了 别忘了加上这一句*/ while(scanf("%s",s[i])!=EOF)/*有一些人说用ges错 就不太清楚了*/ { creatTire(s[i]); i++; } for(j=0; j<i; j++) { n=findTire(s[j]); if(n==2) printf("%s\n",s[j]); } //del(root); return 0; }
相关文章推荐
- Lua元表和元方法
- java使用Redis5--分布式存储
- Win10正式版怎么把图片打开方式恢复默认照片查看器?
- 如何解析域名和设置虚拟主机
- 记北京大学2015信息学科夏令营
- MTK HISR和LISR
- UVA140-Krypton Factor
- 开源库x264的编译
- hive优化三
- Memcached(简单的,纯内存的)
- Virtualbox及其虚拟机debian的相关问题
- OJ 1188 全排列---康托展开
- 【计蒜客系列】挑战难题27:三值排序
- Memcached集群/分布式/高可用 及 Magent缓存代理搭建过程 详解
- thinkphp运算符和exp表达式
- jQuery插件(表单验证/表单返值/灯箱/图片放大/cookie/自动匹配/右键菜单/选中变色/相加相减)
- listview添加头部view问题,数组越界问题
- thinkphp更新和删除数据
- HDU 4081 Qin Shi Huang's National Road System(prim)
- centos6.5安装apache2