zoukankan      html  css  js  c++  java
  • 查询前缀出现的次数----字典树

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    int trie[400001][26], len, root, tot, sum[400001];//sum是统计出现个数
    bool p;
    int n, m;
    char s[11];
    void insert()
    {
        len = strlen(s);
        root = 0;
        for (int i = 0; i<len; i++)
        {
            int id = s[i] - 'a';
            if (!trie[root][id])
                trie[root][id] = ++tot;//字母插入一个新的位置,存进数组里面,否则不做处理 
            sum[trie[root][id]]++;//前缀后移一个位置保存 ,就是把这个前缀出现的次数保存在这个前缀的后一个位置
            root = trie[root][id];
        }
    }
    int search()
    {
        root = 0;
        len = strlen(s);
        for (int i = 0; i<len; i++)
        {
            int id = s[i] - 'a';
            if (!trie[root][id])
                return 0;
            root = trie[root][id];
        }//root经过此循环后变成前缀最后一个字母所在位置的后一个位置 
        return sum[root];//因为前缀后移了一个保存,所以此时的sum[root]就是要求的前缀出现的次数 
    }
    int main()
    {
        int n;
        cin >> n;
        for (int i = 1; i <= n; i++)
        {
            cin >> s;
            insert();
        }
        int m;
        cin >> m;
        for (int i = 1; i <= m; i++)
        {
            cin >> s;
            cout << search();
            //printf("%d
    ", search());
        }
        //system("pause");
        return 0;
    }
  • 相关阅读:
    VB与SQL Server实现文件上传下载
    rszl数据表和crjsj数据表的关联查询
    网吧忘关QQ的后果
    走 近 WSH
    形容长得丑的30句经典句子
    关机VBS脚本
    C51单片机中断定义
    .NET架构的核心技术
    SQL SERVER的命令行工具Osql的用法
    七七情人节
  • 原文地址:https://www.cnblogs.com/-citywall123/p/10433446.html
Copyright © 2011-2022 走看看