热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

设计一个支持以下两个操作的数据结构:voidaddWord(word)boolsearch(word)search(word)可以搜索文字或正则表达式字符串ÿ

设计一个支持以下两个操作的数据结构:
void addWord(word)
bool search(word)
search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 . 或 a-z 。 . 意味着它可以代表任何一个字母。
例如:
addWord("bad")
addWord("dad")
addWord("mad")
search("pad") -> false
search("bad") -> true
search(".ad") -> true
search("b..") -> true
注意事项:
你可以假设所有单词都是由小写字母 a-z 组成的。

详见:https://leetcode.com/problems/add-and-search-word-data-structure-design/description/

Java实现:

class TrieNode {public TrieNode[] children;public boolean isWord = false;public TrieNode(){children=new TrieNode[26];}
}class WordDictionary {private TrieNode root;/** Initialize your data structure here. */public WordDictionary() {root&#61;new TrieNode();}/** Adds a word into the data structure. */public void addWord(String word) {TrieNode node &#61; root;for (char ch: word.toCharArray()) {if (node.children[ch-&#39;a&#39;] &#61;&#61; null) {node.children[ch-&#39;a&#39;] &#61; new TrieNode();}node &#61; node.children[ch-&#39;a&#39;];}node.isWord &#61; true;}/** Returns if the word is in the data structure. A word could contain the dot character &#39;.&#39; to represent any one letter. */public boolean search(String word) {return helper(word, 0, root);}private boolean helper(String word, int start, TrieNode node) {if (start &#61;&#61; word.length()){return node.isWord;} char ch &#61; word.charAt(start);if (ch &#61;&#61; &#39;.&#39;) {for (int i &#61; 0; i <26; i&#43;&#43;) {if (node.children[i] !&#61; null && helper(word, start&#43;1, node.children[i])) {return true;}}} else {return node.children[ch-&#39;a&#39;] !&#61; null && helper(word, start&#43;1, node.children[ch-&#39;a&#39;]);}return false;}
}/*** Your WordDictionary object will be instantiated and called as such:* WordDictionary obj &#61; new WordDictionary();* obj.addWord(word);* boolean param_2 &#61; obj.search(word);*/

C&#43;&#43;实现&#xff1a;

class TrieNode {
public:TrieNode *next[26];char c;bool isWord;TrieNode() : isWord(false) {for (auto & c: next){c&#61;nullptr;}}TrieNode(char _c):c(_c),isWord(false){for(auto &c:next){c&#61;nullptr;}}
};
class WordDictionary {
public: WordDictionary() {root &#61; new TrieNode();}// Adds a word into the data structure.void addWord(string word) {TrieNode *p &#61; root;for (auto &c : word) {int i &#61; c - &#39;a&#39;;if (!p->next[i]){p->next[i] &#61; new TrieNode(c);}p &#61; p->next[i];}p->isWord &#61; true;}// Returns if the word is in the data structure. A word could// contain the dot character &#39;.&#39; to represent any one letter.bool search(string word) {return searchWord(word, root, 0);}bool searchWord(string &word, TrieNode *p, int i) {if (i &#61;&#61; word.size()){return p->isWord;}if (word[i] &#61;&#61; &#39;.&#39;){for (auto &c : p->next) {if (c && searchWord(word, c, i &#43; 1)){return true;}}return false;}else {return p->next[word[i] - &#39;a&#39;] && searchWord(word, p->next[word[i] - &#39;a&#39;], i &#43; 1);}}private:TrieNode *root;
};// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");

 参考&#xff1a;https://www.cnblogs.com/grandyang/p/4507286.html

转:https://www.cnblogs.com/xidian2014/p/8746898.html



推荐阅读
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • JVM 学习总结(三)——对象存活判定算法的两种实现
    本文介绍了垃圾收集器在回收堆内存前确定对象存活的两种算法:引用计数算法和可达性分析算法。引用计数算法通过计数器判定对象是否存活,虽然简单高效,但无法解决循环引用的问题;可达性分析算法通过判断对象是否可达来确定存活对象,是主流的Java虚拟机内存管理算法。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 本文讨论了clone的fork与pthread_create创建线程的不同之处。进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合。在调用系统调用fork创建一个进程时,子进程只是完全复制父进程的资源,这样得到的子进程独立于父进程,具有良好的并发性。但是二者之间的通讯需要通过专门的通讯机制,另外通过fork创建子进程系统开销很大。因此,在某些情况下,使用clone或pthread_create创建线程可能更加高效。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 本文介绍了一种轻巧方便的工具——集算器,通过使用集算器可以将文本日志变成结构化数据,然后可以使用SQL式查询。集算器利用集算语言的优点,将日志内容结构化为数据表结构,SPL支持直接对结构化的文件进行SQL查询,不再需要安装配置第三方数据库软件。本文还详细介绍了具体的实施过程。 ... [详细]
author-avatar
任我闯2502871177
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有