字符串算法之字典树

来源:互联网 发布:mac高光修容液 编辑:程序博客网 时间:2024/06/03 18:58

目标算法:字典树

应用范围:统计拥有相同前缀的字符串

#include<cstdio>#include<iostream>#include<cstring>#include<cstdlib>using namespace std;typedef struct Trie{    int cnt;    Trie *next[26];}Trie;Trie root;void createTrie(char *str){    int len = strlen(str);    Trie *p = &root;    Trie *q;    for(int i=0;i<len;i++)    {        int id = str[i] - 'a';        if(p -> next[id] == NULL)        {            q = (Trie *)malloc(sizeof(root));            q -> cnt = 1;            for(int j=0;j<26;j++)            {                q -> next[j] = NULL;            }            p -> next[id] = q;            p = p -> next[id];        }        else        {            p -> next[id] -> cnt++;            p = p -> next[id];        }    }}int findTrie(char *str){    int len = strlen(str);    Trie *p = &root;    for(int i=0;i<len;i++)    {        int id = str[i] - 'a';        p = p -> next[id];        if(p == NULL)        {            return 0;        }    }    return p->cnt;}int main(){    char str[15];    for(int i=0;i<26;i++)    {        root.next[i] = NULL;    }    while(gets(str) && str[0] != '\0')    {        createTrie(str);    }    memset(str,0,sizeof(str));    while(~scanf("%s",str))    {        int ans = findTrie(str);        printf("%d\n",ans);    }}


 

0 0
原创粉丝点击