【数据结构】21 Trie字符串统计

Trie 树

Trie树又称字典树、单词查找树。是一种能够高效存储和查找字符串集合的数据结构。
在这里插入图片描述

插入字符串

对上面已知的tire树,假如插入一个字符串"abdf",需要进行以下操作:
从字符a开始寻找:
从第一层开始p =0 ,s[p][a]是否存在,若不存在,则创建s[p][a]=++idx; 若存在,不做操作,记p = s[p][a];
找寻字符b:
查看s[p][b]是否存在,若不存在,创建s[p][b]= ++idx,若不存在,不做操作,p = s[p][a]
同样方法找寻字符’d’,‘f’
查找完成后,把该字符串出现次数加一

void Insert(string str){
    int p =0;
    for(int i=0; str[i]!='\0';i++){
        int u = str[i] - 'a';
        if(!s[p][u]){
            s[p][u] = ++idx;
        }
        p = s[p][u];
    }
    cnt[p] ++;
}

查找字符串出现次数

从第一个字符开始,如果没找到,直接返回0;一直找到最后一个字符,返回最后一个字符的下一个位置p,返回cnt[p]即为字符串的个数

int find(string str){
    int p = 0;
    for(int i =0 ; str[i]!='\0';i++){
        int u = str[i]-'a';
        if(!s[p][u]){
            return 0;
        }
        else{
            p = s[p][u];
        }
    }
    return cnt[p];
}

完整代码

对应acwing 835题

# include <iostream>
# include <cstring>

using namespace std;

const int n = 100010;
int s[n][26];
int cnt[n];
int idx;
string str;

void Insert(string str){
    int p =0;
    for(int i=0; str[i]!='\0';i++){
        int u = str[i] - 'a';
        if(!s[p][u]){
            s[p][u] = ++idx;
        }
        p = s[p][u];
    }
    cnt[p] ++;
}

int find(string str){
    int p = 0;
    for(int i =0 ; str[i]!='\0';i++){
        int u = str[i]-'a';
        if(!s[p][u]){
            return 0;
        }
        else{
            p = s[p][u];
        }
    }
    return cnt[p];
}

int main(){
    int m;
    int i=0;
    cin>>m;
    while(m--){
        char op;
        cin>>op>>str;
        if(op == 'I'){Insert(str);}
        else{
            cout<<find(str)<<endl;
        }
    }
    
}

相关推荐

  1. Acwing---835. Trie字符串统计

    2024-03-10 18:46:04       39 阅读
  2. 数据结构专项-字符串

    2024-03-10 18:46:04       22 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-10 18:46:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-10 18:46:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-10 18:46:04       87 阅读
  4. Python语言-面向对象

    2024-03-10 18:46:04       96 阅读

热门阅读

  1. Python与FPGA——帧间差算法

    2024-03-10 18:46:04       42 阅读
  2. Ajax与jQuery

    2024-03-10 18:46:04       39 阅读
  3. 轮询--一起学习吧之架构

    2024-03-10 18:46:04       39 阅读
  4. [LeetCode][LCR184]设计自助结算系统——单调队列

    2024-03-10 18:46:04       41 阅读
  5. Hive动态分区静态分区

    2024-03-10 18:46:04       45 阅读
  6. 双非二本实习前的准备day8

    2024-03-10 18:46:04       38 阅读
  7. CentOS上安装与配置Nginx

    2024-03-10 18:46:04       42 阅读
  8. linux tar分卷压缩与windows合并解压

    2024-03-10 18:46:04       41 阅读
  9. 安卓 Kotlin 面试

    2024-03-10 18:46:04       39 阅读
  10. C语言 goto 语句的基本格式是什么?如何使⽤?

    2024-03-10 18:46:04       39 阅读