为了账号安全,请及时绑定邮箱和手机立即绑定

分析一种前缀树的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);        }    }



作者:芥末无疆sss
链接:https://www.jianshu.com/p/b5c4c556000b
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消