hdu-2072-单词数(字典树)

来源:互联网 发布:ubuntu快捷键 编辑:程序博客网 时间:2024/06/05 10:27
题目:单词数(传送门)

  字典树水题:初学的可以看看模板

模板:http://blog.csdn.net/forever_kirito/article/details/76620722

参考题:http://blog.csdn.net/forever_kirito/article/details/76610719


这题字符串的处理要注意一下: 

code:
#include<cstdio>#include<cstring>#include<string>using namespace std;struct node{    int cnt;    node *next[26];    node(){        cnt=0;        for(int i=0;i<26;i++){            next[i] = NULL;        }    }};node *root;int ans = 0;void Insert(char *str){    //printf("%s\n",str);    node *p=root;    int len = strlen(str);    for(int i=0;i<len;i++){        int id = str[i] - 'a';        if(p->next[id]!=NULL){           p = p->next[id];        }        else{            p->next[id]=new node;            p=p->next[id];        }    }    if(p->cnt!=1){        p->cnt=1;ans++;    }}void del(node *p){    for(int i=0;i<26;i++)        if(p->next[i]!=NULL) del(p->next[i]);    delete(p);}int main(){    char ss[1000];    while(gets(ss)&&strcmp(ss,"#")!=0){        root=new node;        char str[100];        int len=strlen(ss);        ss[len]='*';///让最后一个单词插入到字典树        int t=0;        bool first=false;///在输入多个空格时不读入空格        for(int i=0;i<=len;i++){            if(isalpha(ss[i])){                str[t++]=ss[i];                first=true;            }            else if(first){                str[t]='\0';                t=0;                Insert(str);                first=false;            }        }        printf("%d\n",ans);        ans=0;        del(root);    }    return 0;}


原创粉丝点击