hihoCoder#1014:Trie树

建立Trie树,输出前缀单词个数。

#include <iostream>
#include <vector>
using namespace std;

struct node {
    char value;
    int times;
    node* sons[26];
    node(char a) {
        value = a;
        times = 1;
        for(int i = 0; i < 26; i++)
            sons[i] = NULL;
    }
};

node* root;

void insert_words(string s) {
    node* now = root;
    for(int i = 0; i < s.size() ;i++) {
        node* t = now->sons[s[i] - 'a'];
        if(t != NULL) {
            t->times++;
            now = t;
        }
        else {
            t = new node(s[i]);
            now->sons[s[i] - 'a'] = t;
            now = t;
        }
    }
}

int query_times(string s) {
    node* now = root;
    for(int i = 0; i < s.size() ;i++) {
        node* t = now->sons[s[i] - 'a'];
        if(t != NULL) {
            now = t;
        }
        else
            return 0;
    }
    return now->times;
}

int main()
{
    int n, m;
    string inputstr;
    cin >> n;
    root = new node('0');

    for(int i = 0; i < n; i++) {
        cin >> inputstr;
        insert_words(inputstr);
    }

    cin >> m;
    for(int i = 0; i < m; i++) {
        cin >> inputstr;
        cout << query_times(inputstr) <<endl;
    }

    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • BWA Burrows-Wheeler Aligner作为一个十分出名的alignment软件,在各个生信领域的比...
    栽生物坑里的信息汪阅读 4,695评论 0 5
  • 1. 基本概念 查找结构通常有四种操作:查询某个特定元素是否在表中,检索满足条件的某个特定元素的各种属性,在查找表...
    安安zoe阅读 924评论 0 1
  • (本文转自百度搜索第一个CSDN博客) 一、知识简介 Trie 的强大之处就在于它的时间复杂度。它的插入和查询时间...
    Alan66阅读 850评论 0 0
  • Could not build module “UIKit” 问题解决方法: 1、 /Users/kyjun/Li...
    每周报阅读 11,398评论 1 1
  • 你是我的一切,而别人只不过是从我生命边上轻轻擦过的路人。 ——茨威...
    穗檬阅读 659评论 2 7