题解 | #字典树的实现#

字典树的实现

https://www.nowcoder.com/practice/7f8a8553ddbf4eaab749ec988726702b

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int N = 2000010;
int son[N][26], idx = 0;
int cnt[N], pass[N];

void insert_word(string s){
    int p = 0;
    for(int i = 0;i < s.size();i ++ ){
        int u = s[i] - 'a';
        if(!son[p][u]) son[p][u] = ++ idx;
        p = son[p][u];
        pass[p] ++;
    }
    cnt[p] ++;
}

int search_word(string s){
    int p = 0;
    for(int i = 0;i < s.size();i ++ ){
        int u = s[i] - 'a';
        if(!son[p][u]) return 0;
        p = son[p][u];
    }
    return cnt[p];
}

int prefixNumber(string s){
    int p = 0;
    for(int i = 0;i < s.size();i ++ ){
        int u = s[i] - 'a';
        if(!son[p][u]) return 0;
        p = son[p][u];
    }
    return pass[p];
}

void delete_word(string s){
    if(!search_word(s)) return;
    int p = 0;
    for(int i = 0;i < s.size();i ++ ){
        int u = s[i] - 'a';
        p = son[p][u];
        pass[p] --;
    }
    cnt[p] --;
}

int main()
{
    int m;
    cin >> m;

    while(m --){
        int op;
        string s;
        
        cin >> op >> s;
        
        if(op == 1){
            insert_word(s);
        }else if(op == 2){
            delete_word(s);
        }else if(op == 3){
            search_word(s);
        }else if(op == 4){
            prefixNumber(s);
        }
    }

    return 0;
}

``

全部评论

相关推荐

点赞 评论 收藏
分享
湫湫湫不会java:1.在校经历全删了2.。这些荣誉其实也没啥用只能说,要的是好的开发者不是好好学生3.项目五六点就行了,一个亮点一俩行,xxx技术解决,xxx问题带来xxx提升。第一页学历不行,然后啥有价值的信息也没有,到第二页看到项目了,第一个项目九点,第二个项目像凑数的俩点。总体给人又臭又长,一起加油吧兄弟
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务