首页 > 其他分享 >leetcode211. 添加与搜索单词 - 数据结构设计

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

时间:2024-11-18 13:46:28浏览次数:3  
标签:search word wordDictionary 单词 WordDictionary addWord leetcode211 数据结构 true

请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。

实现词典类 WordDictionary :

  • WordDictionary() 初始化词典对象
  • void addWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配
  • bool search(word) 如果数据结构中存在字符串与 word 匹配,则返回 true ;否则,返回  false 。word 中可能包含一些 '.' ,每个 . 都可以表示任何一个字母。

示例:

输入:
["WordDictionary","addWord","addWord","addWord","search","search","search","search"]
[[],["bad"],["dad"],["mad"],["pad"],["bad"],[".ad"],["b.."]]
输出:
[null,null,null,null,false,true,true,true]

解释:
WordDictionary wordDictionary = new WordDictionary();
wordDictionary.addWord("bad");
wordDictionary.addWord("dad");
wordDictionary.addWord("mad");
wordDictionary.search("pad"); // 返回 False
wordDictionary.search("bad"); // 返回 True
wordDictionary.search(".ad"); // 返回 True
wordDictionary.search("b.."); // 返回 True

提示:

  • 1 <= word.length <= 25
  • addWord 中的 word 由小写英文字母组成
  • search 中的 word 由 '.' 或小写英文字母组成

var WordDictionary = function() {
    this.dictTree = {};
};

/** 
 * @param {string} word
 * @return {void}
 */
WordDictionary.prototype.addWord = function(word) {
    let node = this.dictTree
    for(let ch of word){
        node[ch] ??= {};
        node = node[ch];
    }
    node.isEnd = true;
};

/** 
 * @param {string} word
 * @return {boolean}
 */
WordDictionary.prototype.search = function(word) {
    let len = word.length;
    const searchNode = (node, start)=>{
        let i=start, end = word.indexOf('.', start), noDot = false;
        if(end==-1){
            end = len;
            noDot = true;
        }
        for(; i<end; i++){
            const ch = word[i];
            if(!node[ch]){
                return false;
            }
            node = node[ch];
        }
        if(noDot){
            return 'isEnd' in node;
        }
        let keys = Object.keys(node);
        for(let k of keys){
            if(k == 'isEnd'){
                continue;
            }
            if(searchNode(node[k], i+1)){
                return true;
            }
        }
        return false;
    }
    return searchNode(this.dictTree, 0);
};

/** 
 * Your WordDictionary object will be instantiated and called as such:
 * var obj = new WordDictionary()
 * obj.addWord(word)
 * var param_2 = obj.search(word)
 */

标签:search,word,wordDictionary,单词,WordDictionary,addWord,leetcode211,数据结构,true
From: https://blog.csdn.net/Turboyiyi/article/details/143854883

相关文章

  • 数据结构实验三 2024_树与图实验
    数据结构实验三2024_树与图实验7-1根据后序和中序遍历输出前序遍历本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的前序遍历结果。输入格式:第一行给出正整数n(≤30),是树中结点的个数。随后两行,每行给出n个整数,分别对应后序遍历和中序遍历结果,数字间以......
  • NOIP 数据结构
    线段树标记看成序列而不是数权值对权值、标记对标记、标记对权值P1471区间加,区间平均值,区间方差区间平均值等同于区间和将方差式子拆解:$\frac{1}{n}\sum(A_i-\overline{A})^2=\frac{1}{n}(\sum{A_i}^2-2\sumA_i\overline{A}+n{\overline{A}}^2)$把\(\overline......
  • ES6 Set和Map数据结构用法详解
    文章目录前言Set数据结构创建Set添加元素删除元素删除所有数据获取set的大小(类似于数组的长度)检查是否包含某个元素四种遍历set的方法1.for...of循环2.forEach方法3.转换为数组后使用for循环4.keys(),values(),entries()集合运算方法Map数据结构创建Map添加元素(设......
  • 数据结构与算法刷题(参考代码随想录结构,C、C++实现)
    目录数组数组理论基础二分查找移除元素有序数组的平方长度最小的子数组螺旋矩阵Ⅱ总结篇链表1.链表理论基础2.移除链表元素3.设计链表4.反转链表5.两两交换链表中的节点6.删除链表的倒数第N个节点7.链表相交8.环形链表Ⅱ9.总结篇哈希表1.哈希表理论基础2.有效的字母异位词3.两个数......
  • 数据结构(单向链表)
    链式存储的优缺点:优点:1、动态分配内存:链式存储不需要在数据插入之前分配固定大小的数组或内存块,因此它更适合存储动态变化的数据2、高效的插入和删除操作:在链表中插入或删除元素只需要调整相邻节点的指针,不需要移动大量数据,因此时间复杂度通常为O(1)(在已知位置时)或O(n)(在......
  • 江苏科技大学大二《数据结构》课内实验报告模板答案
    江苏科技大学《数据结构》实验报告(2024/2025学年第1学期)学生姓名:学生学号:院系:计算机学院专业:考核得分:2024年12月实验一线性表的操作一、实验目的掌握线性表的基本操作在存储结构上的实现,其中以单链表的操作作为重点。二、实验题目1.以单......
  • 数据结构/第二章 线性表/数据结构习题/线性表的习题/考研/期末复习
    一、选择题1.在线性表中,表尾元素(    )。A.有且仅有一个直接前驱        B.有且仅有一个直接后继C.没有直接前驱               D.有多个直接前驱2.在顺序表上按位查找一个元素的时间复杂度是(    )。A.O......
  • 数据结构——AVL树
    目录一.AVL树的概念二.AVL树的实现1.AVL树结点的定义2.AVL树的插入3.AVL树的删除4.AVL树的查和改5.AVL树的遍历 6.验证AVL树是否平衡7.AVL树的性能三.整体代码1.AVLTree.h2.AVLTree.cpp一.AVL树的概念二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有......
  • 数据结构(初阶5)---堆与堆排序(详解)
    堆与堆排序一.二叉树初探1).基本概念2).满二叉树和完全二叉树3.)二叉树的存储方式二.堆与堆排序1.堆(完全二叉树的特例)1).建堆(向下调整法)2).堆排序再将堆排序之前,我们先引入二叉树概念一.二叉树初探1).基本概念二叉树是一种数据结构,二叉树形如:1.其中A节......
  • [英语单词]:Canonical,typical
    文章目录简介我的理解是举例chatGPT的回答简介最近在看一些英文资料,看到这个词经常性的出现:canonical,canon。下面这个链接是一个不同的解释,里面的显示看着有些代码问题,凑合着看。https://wikidiff.com/canonical/typical我的理解是Typical的意思是典型,是普通意义......