基础算法-字典树

Trie

主要是需要一个二维数组int[x][y]保存字典树。用一个一维数组保存该节点是否是字符串的结尾。

例题: https://www.acwing.com/problem/content/837/

代码:

import java.io.*;

public class Main{
    
    private static int N = 100010; 
    private static int[][] trie = new int[N][26];
    private static int idx = 0;
    private static int[] flag = new int[N];
    
    private static void insert(String str){
        int q = 0;
        for(int i = 0 ; i < str.length(); i++){
            int v = str.charAt(i) - 'a';
            if(trie[q][v] == 0){
                trie[q][v] = ++idx;
                q = idx;
            }else{
                q = trie[q][v];
            }
        }
        flag[q] ++;
    } 
    
    private static int query(String str){
        int q = 0;
        for(int i = 0 ;i < str.length(); i++){
            int v =  str.charAt(i) - 'a';
            if(trie[q][v] == 0){
                return 0;
            }else{
                q = trie[q][v];
            }
        }
        return flag[q];
    }
    
    public static void main(String[] args) throws Exception{
        var in = new BufferedReader(new InputStreamReader(System.in));
        var out = new BufferedWriter(new OutputStreamWriter(System.out));
        int n = Integer.parseInt(in.readLine());
        while(n > 0){
            n--;
            String[] line = in.readLine().split(" ");
            String op = line[0];
            String str = line[1];
            if(op.equals("I")){
                insert(str);
            }else{
                out.write(String.valueOf(query(str)) + "\n");
            }
        }
        in.close();
        out.close();
    }
    
}
全部评论

相关推荐

03-01 21:45
中北大学 golang
孤蓝长空:请你说一下为什么你用websocket而不是http,请你说一下什么是rpc,为什么用rpc,你的rpc的传输协议是JSON,xml还是什么 请你描述一下你的鉴权流程(完整的) 我问的是第二个项目,随便问的哈哈哈
开工第一帖
点赞 评论 收藏
分享
03-25 19:43
湖北大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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