Trie

本文介绍了一种使用Trie树的数据结构来高效地插入和搜索字符串的方法。具体实现了插入功能Insert、精确搜索功能searchTrie及部分匹配搜索功能Behind,并通过示例代码展示了如何利用这些函数处理大量字符串数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cstdio>
#define Max 26
using namespace std;

struct TrieNode{
    int ti;
    TrieNode *next[Max];
    TrieNode(){
        ti=0;
        memset(next,NULL,sizeof(next));
    }
};

void Insert(TrieNode *root,char * str){
    int len=strlen(str);
    TrieNode *p=root;
    for(int i=0;i<len;++i){
        int id=str[i]-'a';
        if(p->next[id]==NULL)
            p->next[id]=new TrieNode();
        p=p->next[id];
        p->ti++;
    }
}

int searchTrie(TrieNode *root,char *str){
    TrieNode *p=root;
    int len=strlen(str);
    for(int i=0;i<len;++i){
        int id=str[i]-'a';
        if(p->next[id]==NULL)
            return 0;
        p=p->next[id];
    }
    return p->ti;
}

int Behind(TrieNode *root,char *str){
    TrieNode *p=root;
    int len=strlen(str);
    int ans=0;
    for(int i=0;i<len;++i){
        int id=str[i]-'a';
        for(int j=id+1;j<Max;++j)
            if(p->next[j]!=NULL)
                ans+=p->next[j]->ti;
        p=p->next[id];
    }
    for(int i=0;i<Max;++i)
        if(p->next[i]!=NULL)
            ans+=p->next[i]->ti;
    return ans;
}

int n,m,ans;
char str[50005];
char now[50006];

int main(){
    TrieNode *root=new TrieNode();
    scanf("%d",&n);
    for(int i=0;i<n;++i){
        scanf("%s",str);
        Insert(root,str);
    }
    scanf("%d",&m);
    for(int i=1;i<=m;++i){
        scanf("%s",str);
        printf("%d\n",searchTrie(root,str));
    }
    delete root;
    return 0;
}

转载于:https://www.cnblogs.com/qdscwyy/p/7792206.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值