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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. linux系统 大分区,linux大硬盘怎么分区
  2. STC单片机高速下载电路改进
  3. Matlab计时函数的使用
  4. SAP中的邮件发送功能
  5. 关于Echarts的填坑之旅
  6. springboot框架笔记——springboot提供的自动配置
  7. 若要调试此模块,请将其项目生成配置更改为“调试”模式。若要取消显示此消息,请禁用“启动时若没有用户代码则发出警告”调试器选项。...
  8. 使用PowerDesigner设计数据库保姆级教程
  9. AdapterView学习总结
  10. 【基础编程】最大子列和问题
  11. MarkDown 分割线
  12. Java批量解析微信dat文件,微信图片破解
  13. sammy1989 python生成html报告
  14. LaTeX | LaTeX:写大论文时同时使用“\uline”和“\textbf”
  15. 3 JWT 和 JWS
  16. VBS 请求WebAPI接口_如何设计WEB API
  17. 宜搭产品生态伙伴政策——宜搭:高效的低代码应用构建平台
  18. Metasploit-模块介绍
  19. 螺纹检测案例-螺距测量-大径小径检测-螺牙检测
  20. Android 实现视频聊天1对1功能

热门文章

  1. 【转】详解vue的diff算法
  2. c语言新手的无奈,几个新手容易犯的错误
  3. React和Vue对比
  4. IBM推出全闪存产品 加速服务器I/O性能
  5. 总结命令----tar
  6. C#常用操作类库一(验证类)
  7. 改变ALERT组件的背景色和背景透明度.
  8. 在Gutsy安装Freewins插件手记
  9. android rfid 数据解析_基于RFID技术的标签数据完整性与安全性解析
  10. java inflater_Android下LayoutInflater的正确使用姿势