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. 添加与搜索单词 - 数据结构设计相关推荐

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

    211. 添加与搜索单词 - 数据结构设计 题目描述:请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 . 实现词典类 WordDictionary : WordD ...

  2. Java实现 LeetCode 211 添加与搜索单词 - 数据结构设计

    211. 添加与搜索单词 - 数据结构设计 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则 ...

  3. Leetcode 211. 添加与搜索单词 - 数据结构设计 解题思路及C++实现

    解题思路: 用字典树来作为存储的数据结构. 新增单词的时候,就使用字典树插入新单词的方法,与LeetCode 208 题一样. 在查找某一个字典树时,使用深度优先搜索即可. class WordDic ...

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

    1. 题目 设计一个支持以下两种操作的数据结构: void addWord(word) bool search(word) search(word) 可以搜索文字或正则表达式字符串,字符串只包含字母 ...

  5. leetcode 211. Design Add and Search Words Data Structure | 211. 添加与搜索单词 - 数据结构设计(Java)

    题目 https://leetcode.com/problems/design-add-and-search-words-data-structure/ 题解 字典树 + 深度优先搜素,思路参考 le ...

  6. [leetcode]211. 添加与搜索单词 - 数据结构设计 ---前缀树解法

    前缀树解法: struct TrieNode {bool isEnd;TrieNode *next[26];TrieNode(){isEnd = false;memset(next, NULL, si ...

  7. 2022-9-18 Leetcode211.211. 添加与搜索单词 - 数据结构设计【前缀树】

    使用vector比较好,使用map会造成超时. struct Node {bool isWord;vector<Node*> next;Node():isWord(false) {next ...

  8. 百度搜索大数据:“摆摊技巧”搜索热度暴涨655%;中国电信:将逐步关闭3G网络业务;IntelliJ IDEA新版发布|极客头条...

    整理 | 屠敏 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极 ...

  9. c语言编程运动会分数统计系统,东华大学数据结构设计C语言运动会分数统计系统...

    东华大学数据结构设计C语言运动会分数统计系统 东华大学数据结构设计 C 语言运动会分数统计系统东华大学数据结构课程设计 实验报告实验名称: 运动会分数统计系统指导教师:学生姓名:学生学号:实验日期:1 ...

最新文章

  1. 引用次数在 15000 次以上的都是什么神仙论文?
  2. Mysql从5.0升级到 5.1.73
  3. 在使用添加按钮给table插入新的一行时遇见的问题总结及处理方法
  4. floatingactionbutton 更改背景颜色_经验分享!Word轻松换掉证件照背景颜色
  5. 为什么嫁人就选程序员!
  6. Mac中docker版本的ElasticSearch和Kibana安装及操作
  7. 有一定基础学python_有一定编程基础,有什么好的自学python的教程吗?
  8. 图书管理系统活动,时序图
  9. vb net excel 剪贴板 粘贴_Excel零基础教程选项卡功能详解
  10. 力控组态软件与mysql_力控组态软件实时数据库的原理
  11. 有哪些值得推荐的关于英文词根的好书?
  12. Java中解决String无法存储大量字符串的问题,解析Base64编码的图片并保存到本地
  13. 在Mac上安装ie10浏览器
  14. shell脚本基础教程,快速上手
  15. 学习Spring框架这一篇就够了
  16. linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask)
  17. 华为手机怎么使用读卡器_华为手机怎么绑定门禁卡
  18. 密码学技术如何选型?终探量子计算通信的安全模型
  19. Pandas复习笔记--自用
  20. ISTQB FL初级认证系列02:ISTQB FL初级认证考试攻略

热门文章

  1. 单向循环链表C语言实现
  2. HTML列表标签,讲的明明白白!
  3. 阿里P8面试官都说太详细了,面试资料分享
  4. python 编码规范
  5. Html、CSS、JavaScript 实时效果在线编辑器 - 学习的好工具,算不算?!
  6. Eclipse 构建Maven项目
  7. [C++学习历程]基础部分 C++中的函数学习
  8. 【2013.4.6】微软暑期实习生答案(zz)
  9. Lrc歌词-开发标准 (转)
  10. 安装VSTFS后遗症解决方法