专栏首页JavaEdge分析一种前缀树的java实现

分析一种前缀树的java实现

private class TrieNode{

        /**
         * 标识当前结点是否是一个“关键词”的最后一个结点
         * true 关键词的终结 false 继续
         */
        private boolean isEnd = false;

        /**
         * 用map来存储当前结点的所有子节点,非常的方便
         * key 下一个字符 value 对应的结点
         */
        private Map<Character , TrieNode> subNodes = new HashMap<>();

        /**
         * 向指定位置添加结点树
         * @param key
         * @param node
         */
        public void addSubNode(Character key , TrieNode node){
            subNodes.put(key , node);
        }

        /**
         * 根据key获得相应的子节点
         * @param key
         * @return
         */
        public TrieNode getSubNode(Character key){
            return subNodes.get(key);
        }

        //判断是否是关键字的结尾
        public boolean isKeyWordEnd(){
            return isEnd;
        }

        //设置为关键字的结尾
        public void setKeyWordEnd(boolean isEnd){
            this.isEnd = isEnd;
        }
    }




     /**
     * 核心算法一:构建字典树
     * 根据输入的字符串,逐步构建字典树
     * @param textLine
     */
    private void addDirTreeNode(String textLine){
        //边界处理
        if(textLine == null)
            return;
        //临时结点指向根结点
        TrieNode tempNode = root;
        for(int i = 0; i < textLine.length(); i++){
            char charWord = textLine.charAt(i);

            //直接跳过非法文字
            if (isSymbol(charWord))
                continue;

            TrieNode node = tempNode.getSubNode(charWord);
            if (node == null){
                //说明tempNode第一次碰到该关键字结点
                node = new TrieNode();
                tempNode.addSubNode(charWord , node);
            }

            //tempNode指向下一个结点,开始下一次循环
            tempNode = node;

            //到敏感词的最后一个字时,标记为红色(关键词结尾)
            if (i == textLine.length() - 1)
                tempNode.setKeyWordEnd(true);
        }
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 操作系统之文件管理

    按文件性质和用途分类(UNIX),一般分为普通文件、目录文件、特殊文件(设备文件)、管道文件、套接字

    JavaEdge
  • 开发人员必备Redis知识点基础命令键命令string命令hash结构listset结构sorted set

    JavaEdge
  • Redis常用命令详解

    如果客户端处于频道订阅模式下,它将是一个multi-bulk返回,第一次时返回”pong”,之后返回空(empty bulk),除非命令后面更随了参数

    JavaEdge
  • 打牢地基-映射的底层实现(LinkedListMap、BSTMap)

    注意:设置了 getnode 辅助函数, contains()、get()、set() 都会用的到

    用户1081422
  • 我们需要什么样的人机交互方式?

    自从有了计算机,便有了人机交互,人机交互的发展史也是一部消费级电子产品的发展史。键盘繁荣了DOS,鼠标繁荣了Mac和Windows,体感手柄和平衡板成就了Wii...

    金融民工小曾
  • 队列和 BFS —— 栈和 DFS

    这里我们提供一个示例来说明如何使用 BFS 来找出根结点 A 和目标结点 G 之间的最短路径。

    爱写bug
  • 一致性哈希概念与Python的简单实现

    好像从开始接触Zookeeper的时候就知道了有一致性哈希这东西。。。。不过倒是一直都没有去了解这到底是个啥东西。。。只是知道它在分布式系统设计中有十分重要的作...

    py3study
  • 使用js的数据类型简单描述redis各个数据类型

    key:想在redis中创建任意数据都必须有一个名字,可以通过这个名字来操作这个数据,这篇说明里,这个名字被称为key

    黒之染
  • 绘图系列(2):利用 seaborn 绘制箱线图等图形

    基于 SPC 的强风暴历史数据,仅简单分析历年的龙卷风分布情况。主要用到 pandas 处理 csv 数据,并利用 matplotlib,seaborn绘制箱线...

    bugsuse
  • Python3.6.5标准库文档(完整中文版)—内置函数(三)

    True如果对象参数显示为可调用,False则返回, 如果不是。如果这返回true,那么调用失 败仍然是可能的,但如果它是false,调用对象将永远不会成功。请...

    python鱼霸霸

扫码关注云+社区

领取腾讯云代金券