211.添加与搜索单词-数据结构设计
设计一个支持以下两种操作的数据结构:
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
组成的。
class WordDictionary {
public:
/** Initialize your data structure here. */
struct TrieNode {
public:
TrieNode *child[26];
bool isWord;
TrieNode() : isWord(false) {
for (auto &a : child) a = NULL;
}
};
WordDictionary() {
root = new TrieNode();
}
/** Adds a word into the data structure. */
void addWord(string word) {
TrieNode *p = root;
for (auto &a : word) {
int i = a - 'a';
if (!p->child[i]) p->child[i] = new TrieNode();
p = p->child[i];
}
p->isWord = true;
}
/** 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) {
return searchWord(word, root, 0);
}
bool searchWord(string &word, TrieNode *p, int i) {
if (i == word.size()) return p->isWord;
if (word[i] == '.') {
for (auto &a : p->child) {
if (a && searchWord(word, a, i + 1)) return true;
}
return false;
} else {
return p->child[word[i] - 'a'] && searchWord(word, p->child[word[i] - 'a'], i + 1);
}
}
private:
TrieNode *root;
};
/**
* Your WordDictionary object will be instantiated and called as such:
* WordDictionary obj = new WordDictionary();
* obj.addWord(word);
* bool param_2 = obj.search(word);
*/
211.添加与搜索单词-数据结构设计相关推荐
- LeetCode—211. 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 题目描述:请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 . 实现词典类 WordDictionary : WordD ...
- 211. 添加与搜索单词 - 数据结构设计
211. 添加与搜索单词 - 数据结构设计 请你设计一个数据结构,支持 添加新单词 和 查找字符串是否与任何先前添加的字符串匹配 . 实现词典类 WordDictionary : WordDictio ...
- 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 ...
最新文章
- linux系统 大分区,linux大硬盘怎么分区
- STC单片机高速下载电路改进
- Matlab计时函数的使用
- SAP中的邮件发送功能
- 关于Echarts的填坑之旅
- springboot框架笔记——springboot提供的自动配置
- 若要调试此模块,请将其项目生成配置更改为“调试”模式。若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项。...
- 使用PowerDesigner设计数据库保姆级教程
- AdapterView学习总结
- 【基础编程】最大子列和问题
- MarkDown 分割线
- Java批量解析微信dat文件,微信图片破解
- sammy1989 python生成html报告
- LaTeX | LaTeX:写大论文时同时使用“\uline”和“\textbf”
- 3 JWT 和 JWS
- VBS 请求WebAPI接口_如何设计WEB API
- 宜搭产品生态伙伴政策——宜搭:高效的低代码应用构建平台
- Metasploit-模块介绍
- 螺纹检测案例-螺距测量-大径小径检测-螺牙检测
- Android 实现视频聊天1对1功能