1.动态申请的内存用完以后要释放,否则超内存。
2.代码:
#include<cstdio> #include<cstring> #include<stdlib.h> using namespace std; struct Node { int cnt; Node *next[10]; void init() { cnt=0; for(int i=0;i<10;i++) { next[i]=NULL; } } }; Node *p_root; int n; void Insert(char s[]) { int len=strlen(s); Node *p=p_root; for(int i=0;i<len;i++) { int num=s[i]-'0'; if(p->next[num]==NULL) { p->next[num]=(Node *)malloc(sizeof(Node)); (*p->next[num]).init(); } p=p->next[num]; p->cnt++; } } int Search(char s[]) { int len=strlen(s); Node *p=p_root; for(int i=0;i<len;i++) { int num=s[i]-'0'; p=p->next[num]; } return p->cnt; } void Destroy(Node *p) { for(int i=0;i<10;i++) { if(p->next[i]!=NULL) { Destroy(p->next[i]); } } free(p); } int main() { int t; scanf("%d",&t); char s[10005][15]; while(t--) { p_root=(Node *)malloc(sizeof(Node)); (*p_root).init(); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s[i]); Insert(s[i]); } int flag=0; for(int i=0;i<n;i++) { if(Search(s[i])>=2) { flag=1; break; } } if(flag) printf("NO\n"); else printf("YES\n"); Destroy(p_root); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
hdu 1671 Phone List(给定n个电话号码串,问这n个电话号码串中是否存在某一串是其它串的前缀,如果存在输出NO,否则YES)
原文:http://blog.csdn.net/xky1306102chenhong/article/details/47427841