首页 > 编程语言 >字典树基础(Java实现)

字典树基础(Java实现)

时间:2024-04-01 21:29:49浏览次数:22  
标签:cnt TreeNode int 基础 static Java root public 字典

字典树也叫Trie,是一种树形结构,其中每个节点可以存储一些变量表示该字符串出现的数量。每条边表示一个字符,如节点9存储一个变量cnt,说明存在三个字符串为“cbc” 

例题:前缀判定

import java.math.BigInteger;
import java.util.*;

public class Main {
    static class TreeNode{
        HashMap<Character,TreeNode>map;
        int cnt;
        public TreeNode(){
            cnt=0;
            map=new HashMap<>();
        }
    }
    static TreeNode root;//根节点
    //插入字符串
    public static void insert(String s){
        TreeNode c=root;
        for(int i=0;i<s.length();i++){
            char x=s.charAt(i);
            if(!c.map.containsKey(x)){
                c.map.put(x,new TreeNode());
                c.cnt++;
            }
            c=c.map.get(x);
        }
        c.cnt++;
    }
    //查询字符串是否出现
    public static boolean query(String s){
        TreeNode c=root;
        for(int i=0;i<s.length();i++){
            if(!c.map.containsKey(s.charAt(i))){
                return false;
            }
            c=c.map.get(s.charAt(i));
        }
        return c.cnt>0;
    }
    //查找出现的次数
    public static int query1(String s){
        TreeNode c=root;
        for(int i=0;i<s.length();i++){
            if(!c.map.containsKey(s.charAt(i))){
                return 0;
            }
            c=c.map.get(s.charAt(i));
        }
        return c.cnt;
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n=scanner.nextInt();
        int m=scanner.nextInt();
        root=new TreeNode();
        for(int i=0;i<n;i++){
            String s=scanner.next();
            insert(s);
        }
        for(int i=0;i<m;i++){
            String s=scanner.next();
            if(query(s)){
                System.out.println("Y");
            }
            else{
                System.out.println("N");
            }
        }
        //出现的前缀
        System.out.println(query1("aa"));
    }

}

标签:cnt,TreeNode,int,基础,static,Java,root,public,字典
From: https://blog.csdn.net/gaoqiandr/article/details/137246333

相关文章

  • Java中如何以文本方式输出"\"
    1.转义符使用"\"在java中是一个转义符,只要有它的出现往往有他独特的意义,如下图:那么,在输出文本时,需要输出"\"怎么办呢,其实很简单,只要多加一个"\"就好啦。//此处是以文本方式输出\System.out.print("\\txasx\\");运行如下:......
  • 排列的字典序问题(Java)
    问题描述:n个元素{1,2,…,n}有n!个不同的排列。将这n!个排列按字典序排列,并编号为0,1,…,n!-1.每个排列的编号为其字典序值。例如,当n=3时,6个不同排列的字典序值如下:字典序值排列   0    1    2    3    4    5       ......
  • 美术生零基础转行TA中(第3天)
    20240401学习目标:刷课至2.9学习内容:2.7模型的本地空间Houdini观察空间:中心点在屏幕中心右手坐标系,右正左负应用程序阶段数据几何阶段顶点着色模型变换视图变换顶点着色几何曲面细分着色裁剪投影变换裁剪屏幕映射光栅化阶段三角形设置三......
  • 字典案例
    #案例1:#假设,已知小明、小红、小亮三人的语文、数学、英语三科成绩,将姓名、学科、成绩做对应,并计算谁的总分最高  #案例2:#假设,已知小明、小红、小亮三人的语文、数学、英语三科成绩,将姓名、学科、成绩做对应,并计算谁的总分最高  ......
  • Javascript
    JS的引入方式<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>js的引入方式</title&......
  • 初学Java,HelloWorld
    1、开发三步骤1.1程序开发步骤说明        JDK安装完毕,可以开发我们第一个Java程序了。        Java程序开发三步骤:编写、编译、运行。1.2编写Java源程序保存.java源文件在电脑中目录新建文本文件,完整的文件名修改为HelloWorld.java,其中文件名为Hello......
  • JUC:java内存模型(如何保证?可见性、原子性、有序性)
    文章目录java内存模型可见性解决方法原子性有序性流水线技术模式之Balking(犹豫)java内存模型JMM即JavaMemoryModel,它定义了主存、工作内存抽象概念,底层对应着CPU寄存器、缓存、硬件内存、CPU指令优化等。JMM体现在以下几个方面:原子性-保证指令不......
  • python基础(四)----列表、字典练习题
    好友管理系统请设计一个好友管理系统,每个功能都对应一个序号,用户可根据提示“请输入您的选项”选择序号执行相应的操作,包括:(1)添加好友:用户根据提示“请输入要添加的好友:”输入要添加好友的姓名,添加后会提示“好友添加成功”。(2)删除好友:用户根据提示“请输入删除好友姓名:”输入要删......
  • TCP/IP 基础知识总结
    我们刚开始接触计算机网络最多的协议,莫属TCP/IP协议了,TCP/IP协议同时也是互联网中最著名的协议。TCP/IP的历史背景最初还没有TCP/IP协议的时候,也就是在20世纪60年代,许多国家和地区认识到通信技术的重要性。美国国防部希望能够研究一种即使通信线路被破坏也能够通过其他......
  • C++基础夯实
     std::copystd::searchstd::back_inserterstd::equalmemcpy演示如何使用std::copy、std::search、std::back_inserter std::equal这四个方法。我们假设有两个向量,一个源向量source,一个目标向量destination。我们将首先使用std::copy方法将源向量中的元素复制......