hdu1671Phone List(字典树---判断有无相同的前缀单词)

来源:互联网 发布:片头制作软件 编辑:程序博客网 时间:2024/05/21 10:32

1.题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=1671

 

2.参考代码:

 

#include <iostream>#include <cstdio>#include <cstring>using namespace std;struct node{int cnt;node* next[10];node(){cnt=0;memset(next,0,sizeof(next));}}; node* root=new node;void build(char* s){node* p=root;int len=strlen(s);for(int i=0;i<len;i++){if(!p->next[s[i]-'0'])p->next[s[i]-'0']=new node;p=p->next[s[i]-'0'];p->cnt++;}}int find(char* s){node* p=root;int len=strlen(s);for(int i=0;i<len;i++)p=p->next[s[i]-'0'];return p->cnt;}void freedom(node* p){for(int i=0;i<10;i++){if(p->next[i])freedom(p->next[i]);}free(p);}int main(){int t,n,i;char str[10001][30];scanf("%d",&t);while(t--){root=new node;scanf("%d",&n);for(i=0;i<n;i++){scanf("%s",str[i]);build(str[i]);}int flag=0;for(i=0;i<n;i++){if(find(str[i])!=1)   ///一旦有一个访问超过一次就说明不可能{flag=0;break;}flag=1;}if(flag)printf("YES\n");elseprintf("NO\n");freedom(root);}return 0;}


 

 

原创粉丝点击