字典树

来源:互联网 发布:什么是网络平台 编辑:程序博客网 时间:2024/05/17 03:44

 

#include <iostream>#include <cstdio>#include <cstring>#include <string>using namespace std;const int kind = 26;struct node{    int num;    bool terminal;    node *next[26];    node(){        num = 1;        terminal = false;        memset(next, 0, sizeof(next));    }};string s1, s2;void Insert(node *root, string s1){    node *p = root;    int index;    int len = s1.length();    for(int i = 0; i < len; i++){        index = s1[i] - 'a';        if(p -> next[index] == NULL){            p -> next[index] = new node();        }        else{            p -> next[index] -> num++;        }        p = p -> next[index];    }    p ->terminal = true;}int Find(node *root, string s2){    node *p = root;    int i, index;    int len = s2.length();    for(i = 0; i < len; i++){        index = s2[i] - 'a';        if(p->next!=NULL){            if(i == len - 1){                return p->next[index]->num;            }        }        else{            return 0;        }        p = p->next[index];    }    return 0;}int main(){    node *root = new node();    while(getline(cin, s1) && !s1.empty()){        Insert(root, s1);    }    while(getline(cin, s2)){        int k = Find(root, s2);        printf("%d\n", k);    }    return 0;}


 

原创粉丝点击