211. 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计
请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 。
实现词典类 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"); // return False
wordDictionary.search("bad"); // return True
wordDictionary.search(".ad"); // return True
wordDictionary.search("b.."); // return True
提示:
- 1 <= word.length <= 500
- addWord 中的 word 由小写英文字母组成
- search 中的 word 由 ‘.’ 或小写英文字母组成
- 最多调用 50000 次 addWord 和 search
解题思路
使用字典树存储添加进来的字符串,搜索字符串时,如果遇到’.’,因为每个 . 都可以表示任何一个字母,那么就可以当成遍历当前下标所有可能的字母,对于每种字母的选择情况继续向下递归。
代码
class WordDictionary {Node root = new Node();public WordDictionary() {}public boolean Search(String s, int idx, Node cur) {if (idx == s.length()) {return cur.isEnd;}if (s.charAt(idx) == '.') {boolean res = false;for (int i = 0; i < 26; i++) {if (cur.nodes[i] != null)res |= Search(s, idx + 1, cur.nodes[i]);}return res;} else {if (cur.nodes[s.charAt(idx) - 'a'] == null)return false;return Search(s, idx + 1, cur.nodes[s.charAt(idx) - 'a']);}}public void addWord(String s) {int n = s.length();Node cur = root;for (int i = 0; i < n; i++) {if (cur.nodes[s.charAt(i) - 'a'] == null)cur.nodes[s.charAt(i) - 'a'] = new Node();cur = cur.nodes[s.charAt(i) - 'a'];}cur.isEnd = true;}public boolean search(String word) {return Search(word,0,root);}}class Node {boolean isEnd;Node[] nodes;public Node() {nodes = new Node[26];}}
/*** Your WordDictionary object will be instantiated and called as such:* WordDictionary obj = new WordDictionary();* obj.addWord(word);* boolean param_2 = obj.search(word);*/
211. 添加与搜索单词 - 数据结构设计相关推荐
- LeetCode—211. 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 题目描述:请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 . 实现词典类 WordDictionary : WordD ...
- Java实现 LeetCode 211 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则 ...
- Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现
解题思路: 用字典树来作为存储的数据结构. 新增单词的时候,就使用字典树插入新单词的方法,与LeetCode 208 题一样. 在查找某一个字典树时,使用深度优先搜索即可. class WordDic ...
- LeetCode 211. 添加与搜索单词 - 数据结构设计(Trie树)
1. 题目 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 ...
- leetcode 211. Design Add and Search Words Data Structure | 211. 添加与搜索单词 - 数据结构设计(Java)
题目 https://leetcode.com/problems/design-add-and-search-words-data-structure/ 题解 字典树 + 深度优先搜素,思路参考 le ...
- [leetcode]211. 添加与搜索单词 - 数据结构设计 ---前缀树解法
前缀树解法: struct TrieNode {bool isEnd;TrieNode *next[26];TrieNode(){isEnd = false;memset(next, NULL, si ...
- 2022-9-18 Leetcode211.211. 添加与搜索单词 - 数据结构设计【前缀树】
使用vector比较好,使用map会造成超时. struct Node {bool isWord;vector<Node*> next;Node():isWord(false) {next ...
- 百度搜索大数据:“摆摊技巧”搜索热度暴涨655%;中国电信:将逐步关闭3G网络业务;IntelliJ IDEA新版发布|极客头条...
整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...
- c语言编程运动会分数统计系统,东华大学数据结构设计C语言运动会分数统计系统...
东华大学数据结构设计C语言运动会分数统计系统 东华大学数据结构设计 C 语言运动会分数统计系统东华大学数据结构课程设计 实验报告实验名称: 运动会分数统计系统指导教师:学生姓名:学生学号:实验日期:1 ...
最新文章
- 引用次数在 15000 次以上的都是什么神仙论文?
- Mysql从5.0升级到 5.1.73
- 在使用添加按钮给table插入新的一行时遇见的问题总结及处理方法
- floatingactionbutton 更改背景颜色_经验分享!Word轻松换掉证件照背景颜色
- 为什么嫁人就选程序员!
- Mac中docker版本的ElasticSearch和Kibana安装及操作
- 有一定基础学python_有一定编程基础,有什么好的自学python的教程吗?
- 图书管理系统活动,时序图
- vb net excel 剪贴板 粘贴_Excel零基础教程选项卡功能详解
- 力控组态软件与mysql_力控组态软件实时数据库的原理
- 有哪些值得推荐的关于英文词根的好书?
- Java中解决String无法存储大量字符串的问题,解析Base64编码的图片并保存到本地
- 在Mac上安装ie10浏览器
- shell脚本基础教程,快速上手
- 学习Spring框架这一篇就够了
- linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask)
- 华为手机怎么使用读卡器_华为手机怎么绑定门禁卡
- 密码学技术如何选型?终探量子计算通信的安全模型
- Pandas复习笔记--自用
- ISTQB FL初级认证系列02:ISTQB FL初级认证考试攻略