LeetCode 211. 添加与搜索单词 - 数据结构设计(Trie树)

1. 题目

设计一个支持以下两种操作的数据结构:

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 组成的。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/add-and-search-word-data-structure-design
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. Trie解题

  • 构建Trie树
  • 回溯查找,遇见.在所有的子树里查找,没有遇见.在,当前相等的情况下,再继续在所有的子树中递归查找
class TrieNode
{
public:char ch;TrieNode *next[26];bool isEnd;TrieNode(char c = '/'):ch(c),isEnd(false) {memset(next, 0, sizeof(TrieNode*)*26);}
};
class Trie
{
public:TrieNode *root;Trie(){root = new TrieNode();}~Trie(){destroy(root);}void destroy(TrieNode *root){if(root == NULL)return;for(int i = 0; i < 26; i++)destroy(root->next[i]);delete root;}void insert(string str){TrieNode *cur = root;for(char s:str){if(cur->next[s-'a'] == NULL)cur->next[s-'a'] = new TrieNode(s);cur = cur->next[s-'a'];}cur->isEnd = true;}
};
class WordDictionary {Trie tree;
public:/** Initialize your data structure here. */WordDictionary() {}/** Adds a word into the data structure. */void addWord(string word) {tree.insert(word);}/** Returns if the word is in the data structure. A word could contain the dot character '.' to represent any one letter. */bool search(string word) {TrieNode *cur = tree.root;bool found = false;for(int i = 0; i < 26; ++i){find(word,cur->next[i],0,found);}return found;}void find(string &word, TrieNode *root, int idx, bool &found){if(found || !root)return;if(idx == word.size()-1){if(root->isEnd)if(word[idx] == '.' || word[idx] == root->ch)found = true;return;}if((word[idx] != '.'&&root->ch == word[idx])|| word[idx] == '.'){	for(int i = 0; i < 26; ++i){find(word,root->next[i],idx+1,found);}}}
};

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

研究综述 - TKDE2020 | 基于知识图谱的推荐系统

作者 | 郭庆宇转载公众号 | 读芯术TKDE 2020综述&#xff1a;基于知识图谱的推荐系统A Survey on Knowledge Graph-Based Recommender Systems中科院计算所、百度、港科大、中科大、微软原文Qingyu Guo, Fuzhen Zhuang, Chuan Qin, Hengshu Zhu, Xing Xie, Hui Xiong, Qing He…

谢撩,人在斯坦福打SoTA

文 | Jazon编 | 小戏小编注&#xff1a;不知道大家还记不记得卖萌屋之前人在斯坦福&#xff0c;刚上CS224n的Jazon小哥发来的关于斯坦福神课CS224n上半学期的报道&#xff1f;今天&#xff0c;Jazon又在斯坦福前线发来了关于他在CS224n下半学期的经历&#xff0c;那么现在让我们…

前端感官性能的衡量和优化实践

本文已发表在2017年8月《程序员》杂志。 我们为什么需要关注站点的性能&#xff0c;性能为什么如此重要呢&#xff1f;如今任何互联网产品首先重要的都是流量&#xff0c;流量最终会转换为商业价值。所以在互联网产品中&#xff0c;流量、转化率和留存率基本上是产品经理或者业…

LeetCode 421. 数组中两个数的最大异或值(Trie树)

1. 题目 给定一个非空数组&#xff0c;数组中元素为 a0, a1, a2, … , an-1&#xff0c;其中 0 ≤ ai < 231 。 找到 ai 和aj 最大的异或 (XOR) 运算结果&#xff0c;其中0 ≤ i, j < n 。 你能在O(n)的时间解决这个问题吗&#xff1f; 示例:输入: [3, 10, 5, 25, 2,…

论文浅尝 - EMNLP2020 | 基于知识库的多跳关系推理

笔记整理 | 谢辛&#xff0c;浙江大学硕士研究方向 | 自然语言处理&#xff0c;知识图谱Feng Y, Chen X, Lin B Y, et al. Scalable multi-hop relational reasoning for knowledge-aware question answering[J]. 2020.emnlp-main.99链接&#xff1a;https://arxiv.org/pdf/200…

智能工单处理,达观数据助力运营商实现业务流程智能化改造

智能工单处理&#xff0c;达观数据助力运营商实现业务流程智能化改造 https://m.sohu.com/a/466386308_383123 智能工单处理&#xff0c;达观数据助力运营商实现业务流程智能化改造 达观数据 05-14 14:04 订阅 运营商一线业务运营亟待智能化改造 近几年&#xff0c;运营商领域…

CV和NLP中的无监督预训练(生成式BERT/iGPT和判别式SimCLR/SimCSE)

文 | Smarter在之前的文章中讲过unsupervised learning主要分为生成式和判别式&#xff0c;那么unsupervised pretrain自然也分为生成式和判别式。目前CV和NLP都出现了非常强大的无监督预训练&#xff0c;并且在生成式和判别式都各有造诣&#xff0c;本文主要想归纳一下CV和NLP…

Android Binder漏洞挖掘技术与案例分享

本文由作者根据其在KCon 2016黑客大会上的演讲内容整理而成。演讲稿链接&#xff1a;Binder fuzzing based on drozer。 文章开始&#xff0c;先来看几个我在工作生活中发现的Android漏洞。其中包括Android系统锁屏密码绕过&#xff08;影响了所有安全补丁在2016年10月份以前的…

Transformer太深不行?NUS字节发现注意力坍缩,提出重注意机制!

文 | 陈萍、杜伟源 | 机器之心CNN 通过堆叠更多的卷积层来提高性能&#xff0c;而 transformer 在层次更深时会很快进入饱和。基于此&#xff0c;来自新加坡国立大学和字节跳动 AI Lab 的研究者引入了 Re-attention 机制&#xff0c;以很小的计算代价重新生成注意力图以增强各层…

LeetCode 212. 单词搜索 II(Trie树+DFS)

1. 题目 给定一个二维网格 board 和一个字典中的单词列表 words&#xff0c;找出所有同时在二维网格和字典中出现的单词。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的…

研究综述 | 多关系知识图谱表示学习综述

作者 | CHEONG转载自公众号 | 机器学习与自然语言处理本文分享一篇多关系知识图谱表示学习汇报ppt&#xff0c;介绍近几年及2020新出的共七篇处理异质图的模型。先列出该汇报ppt中将要介绍的七篇论文&#xff1a;Motivation异质知识图谱研究的对象便是如何处理多关系知识图谱&a…

PaddleHub教程合集

原文链接&#xff1a;https://aistudio.baidu.com/aistudio/projectdetail/2168053 PaddleHub教程合集 PaddleHub是基于PaddlePaddle生态下的预训练模型管理和迁移学习工具&#xff0c;可以结合预训练模型更便捷地开展迁移学习工作。通过PaddleHub&#xff0c;您可以&#xff1…

人物志 | KDD Cup 2017双料冠军燕鹏

2017年数据挖掘领域最有影响力的赛事KDD Cup近日揭晓&#xff0c;Convolution队从全球70个国家的3582支队伍里脱颖而出&#xff0c;包揽两项任务的冠军。这支双料冠军队成员名单里&#xff0c;有一个我们熟悉的名字——美团点评高级技术专家燕鹏。 说燕鹏可能大家并不一定知道&…

论文浅尝 - IJCAI2020 | KGNN:基于知识图谱的图神经网络预测药物与药物相互作用...

转载公众号 | AI TIME 论道药物间相互作用&#xff08;DDI&#xff09;预测是药理学和临床应用中一个具有挑战性的问题&#xff0c;在临床试验期间&#xff0c;有效识别潜在的DDI对患者和社会至关重要。现有的大多数方法采用基于AI的计算模型&#xff0c;通常倾向于集成多个数…

LeetCode 79. 单词搜索(回溯DFS)

1. 题目 给定一个二维网格和一个单词&#xff0c;找出该单词是否存在于网格中。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: board [[…

中文BERT上分新技巧,多粒度信息来帮忙

文 | ????????????????自然语言处理实在是太难啦&#xff01;中文尤其难&#xff01;相比于英文&#xff0c;中文是以词作为语义的基本单位的&#xff0c;因此传统的中文 NLP 都需要先进行分词。分词这步就劝退了很多人&#xff0c;比如“研究生活很充实”&…

监控平台前端SDK开发实践

监控是提高故障处理能力和保障服务质量必需的一环&#xff0c;它需要负责的内容包括&#xff1a;及时上报错误、收集有效信息、提供故障排查依据。 及时上报错误&#xff1a;发生线上问题后&#xff0c;经由运营或者产品反馈到开发人员&#xff0c;其中流转过程可能是几分钟甚至…

论文浅尝 - WWW2020 | 通过对抗学习从用户—项目交互数据中挖掘隐含的实体偏好来用于知识图谱补全任务...

笔记整理 | 陈湘楠&#xff0c;浙江大学在读硕士。现有的知识图谱补全方法都在试图设计全新的学习算法&#xff0c;来使用已知的事实信息去推理知识图谱中的潜在语义。但随着知识图谱的广泛使用&#xff0c;知识图谱中的许多实体对应着应用程序系统的在线项目。但知识图谱和应用…

LeetCode 24. 两两交换链表中的节点(递归+循环)

1. 题目 给定一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后的链表。 你不能只是单纯的改变节点内部的值&#xff0c;而是需要实际的进行节点交换。 示例: 给定 1->2->3->4, 你应该返回 2->1->4->3.2. 解题 2.1 递归 class Solut…

美团数据平台融合实践

本文根据作者在2017年ArchSummit的分享记录整理而成。 互联网格局复杂多变&#xff0c;大规模的企业合并重组不时发生。原来完全独立甚至相互竞争的两家公司&#xff0c;有着独立的技术体系、平台和团队&#xff0c;如何整合&#xff0c;技术和管理上的难度都很大。2015年10月&…