211. 添加与搜索单词 - 数据结构设计---------------字典树

这篇具有很好参考价值的文章主要介绍了211. 添加与搜索单词 - 数据结构设计---------------字典树。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

原题链接:

211. 添加与搜索单词 - 数据结构设计

https://leetcode.cn/problems/design-add-and-search-words-data-structure/description/

完成情况:

211. 添加与搜索单词 - 数据结构设计---------------字典树,# LeetCode题解,数据结构,开发语言,leetcode文章来源地址https://www.toymoban.com/news/detail-622369.html

解题思路:

参考代码:

package 中等题;

public class __211添加与搜索单词_数据结构设计 {


    class WordDictionary {
        private Trie root;

        public WordDictionary() {
            root  = new Trie();
        }

        public void addWord(String word) {
            root.insert(word);
        }

        public boolean search(String word) {
            return dfs(word,0,root);
        }

        /**
         *
         * @param word
         * @param index
         * @param curNode
         * @return
         */
        private boolean dfs(String word, int index, Trie curNode) {
            if (index == word.length()){
                return curNode.isEnd();       //curNode.isEnd是去调Trie里面的isEnd属性
            }
            char ch = word.charAt(index);
            if (Character.isLetter(ch)){        //如果已经包含当前字典序开头元素
                int childIndex = ch - 'a';
                /**
                 *
                 * 下面这行代码。他妈的是什么东西啊????????????
                 *
                 */
                Trie child = curNode.getChildren()[childIndex];
                /**
                 *
                 *
                 *
                 *
                 *
                 *
                 */
                if (child != null && dfs(word,index+1,child)){
                    return true;
                }
            }else {
                for (int i=0;i<26;i++){
                    Trie child = curNode.getChildren()[i];
                    if (child != null  && dfs(word,index+1,child)){
                        return true;
                    }
                }
            }
            return false;
        }
    }

    //创建一个【字典树】类
    class Trie{
        private Trie[] children;
        private  boolean isEnd;

        public Trie(){
            children = new Trie[26];    //字典树链表位26个字母
            isEnd = false;  //每个都默认看看是不是尾部
        }

        /**
         *
         * @param word
         */
        public void insert(String word){
            Trie node = this;
            for (int i=0;i<word.length();i++){
                char ch = word.charAt(i);
                int  index = ch -'a';       //用数字带指代26个字母索引
                if (node.children[index] == null){
                    node.children[index] = new Trie();
                }
                node = node.children[index];
            }
            node.isEnd = true;
        }

        /**
         *  生成对应的默认构造器
         */
        public Trie[] getChildren(){
            return children;
        }
        public boolean isEnd() {
            return isEnd;
        }
    }




        




}


到了这里,关于211. 添加与搜索单词 - 数据结构设计---------------字典树的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构课程设计

    编制一个能演示执行集合的交、并和差运算的程序。 要求: 集合元素用小写英文字母,执行各种操作应以对话方式执行。 算法要点:利用单链表表示集合;理解好三种运算的含义 分析 : 输入:输入应该具有判断是否为小写字母的功能,如果不是小写字母,应该舍去,同时

    2024年02月02日
    浏览(47)
  • 【数据结构】设计环形队列

    环形队列是一种线性数据结构,其操作表现基于 FIFO(先进先出)原则并且队尾被连接在队首之后以形成一个循环。它也被称为“环形缓冲器”。 环形队列的一个好处是我们可以利用这个队列之前用过的空间。在一个普通队列里,一旦一个队列满了,我们就不能插入下一个元

    2024年02月09日
    浏览(95)
  • 数据结构设计--学生信息管理系统

    目录 1.环境 2.知识图 3.程序的功能 4.程序的源代码 vs code 快排+哈希 (1)程序中的数据存储到文件中。 (2) 录入学生成绩,格式如下: (学号(12位) 、姓名、性别、专业、班级、课程成绩(5门课程),总分)其中,总分通过程序计算求得。 (3)输出所有学生成绩。 (a)按某门课程成绩降序

    2024年02月04日
    浏览(49)
  • 设计社交网络的数据结构

    Use Cases User 搜索某人然后看到被搜索人的最短路径 Service 有高可用 约束和假设 状态假设 Traffic 不是平均分布的 一些被搜索者是更加受欢迎的,某些被搜索者只会被搜索一次 图数据不适用与单个机器 图的分布是轻量级的 一亿个 User 每个 User 平均有 50 个朋友 十亿个搜索每个

    2024年01月20日
    浏览(42)
  • 【LeetCode: 155. 最小栈 + 栈 + 数据结构设计】

    🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,CSDN-Java领域优质创作者🏆,保研|国家奖学金|高中学习JAVA|大学完善JAVA开发技术栈|面试刷题|面经八股文

    2024年02月22日
    浏览(56)
  • 【数据结构课程设计】关键路径问题

    1 问题描述与功能需求分析 1.1问题描述 1) 任务:设计一个程序求出完成整项工程至少需要多少时间以及整项工程中的关键活动。 2)基本要求: (1)对一个描述工程的 AOE 网,应判断其是否能够顺利进行。 (2)若该工程能顺利进行,输出完成整项工程至少需要多少时间,以及

    2024年02月10日
    浏览(45)
  • 数据结构课程设计1: 区块链

    1.任务: [问题描述] 使用链表设计一个保存信息的系统,该系统拥有类似区块链的设计以防止信息被轻易篡改。 该题目使用一个链表。信息保存在链表的每一个节点中,每个节点需要包含该节点的编号、信息和校验码。其中: + 每个节点的编号按照顺序递增,从0开始。 + 节

    2023年04月16日
    浏览(114)
  • 数据结构课程设计 ——考试报名系统

    数据结构课程设计 ——考试报名系统 一、项目功能要求 完成对考生信息的建立,查找,插入,修改,删除等功能。其中考生信息包括准考证号,姓名,性别,年龄和报考类别等信息。项目在设计时应首先确定系统的数据结构,定义类的成员变量和成员函数;然后实现各成员

    2024年02月04日
    浏览(51)
  • 【数据结构实训】哈希表设计

    [问题描述] 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过2,并完成相应的建表和查表程序。 [基本要求] 假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或

    2024年02月11日
    浏览(38)
  • 数据结构OJ:设计循环队列

    本题为LeetCode上的经典题目,题目要求我们设计一种循环队列,满足FIFO原则且队尾被连接在队首之后。 题目中介绍循环队列的好处是可以重复利用空间,所以我们很容易想到在初始化时即开辟指定大小的空间,之后便不需要再开辟空间,只需后续销毁即可。 首先我们要选择

    2024年04月17日
    浏览(64)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包