博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode OJ:Add and Search Word - Data structure design(增加以及搜索单词)
阅读量:6768 次
发布时间:2019-06-26

本文共 1852 字,大约阅读时间需要 6 分钟。

Design a data structure that supports the following two operations:

void addWord(word)bool search(word)

search(word) can search a literal word or a regular expression string containing only letters a-z or .. A . means it can represent any one letter.

For example:

addWord("bad")addWord("dad")addWord("mad")search("pad") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("b..") -> true

这题用set做的话可能会超时,应该自己定义数据结构,构造一个单词数,这样效率更高,在搜索的时候就是dfs了, 代码如下:

1 class WordDictionary { 2 public: 3     struct TreeNode{ 4     public: 5         TreeNode *child[26]; 6         bool isWord; 7  8         TreeNode() : isWord(false){ 9             for(auto & a : child)10                 a = NULL;11         }12     };13 14     WordDictionary() {15         root = new TreeNode();16     }17 18     // Adds a word into the data structure.19     void addWord(string word) {20         TreeNode * p = root;21         for(auto & a : word){22             if(!p->child[a-'a'])23                 p->child[a-'a'] = new TreeNode;24             p = p->child[a-'a'];25         }26         p->isWord = true;//标记一个单词27     }28 29 30     bool searchWord(string & word, TreeNode * p, int index)31     {32         if(word.size() == index) return p->isWord;//这条很关键33         if(word[index] == '.'){34             for(auto & a : p->child){35                 if(a && searchWord(word, a, index+1)) return true;36             }37             return false;//不要忘了38         }else{39             return (p->child[word[index] - 'a'])&&searchWord(word, p->child[word[index] - 'a'], index+1);40         }41     }42 43 46     bool search(string word) {47         return searchWord(word, root, 0);48     }49 50 51 52 53     // WordDictionary()//进入函数后会首先执行构造函数54     // : root(new TreeNode) {}55 private:56     TreeNode * root;57 };

这回写的比较乱,见谅

转载于:https://www.cnblogs.com/-wang-cheng/p/4975929.html

你可能感兴趣的文章
MT47H64M16NF-25EM相关参数介绍
查看>>
C# FileStream简单介绍和使用
查看>>
我的友情链接
查看>>
Centos7 mount/ rpm/ yum 软件仓库搭建
查看>>
EC2上源安装vnstat
查看>>
高性能Web服务之varnish应用详解及实战应用
查看>>
我的友情链接
查看>>
Docker容器管理--CentOS7安装docker
查看>>
CentOS 6网卡名称修改 以及 centos7 采用传统命名方式
查看>>
Maven 中的jar包冲突
查看>>
lvs基于fwm定义集群服务
查看>>
awk 系列Part3:如何使用 awk 按模式筛选文本或字符串
查看>>
用cxfreeze打包Python3.3成exe文件
查看>>
关于c语言内存地址对齐的一点思考
查看>>
Unity3D游戏开发之《愤怒的小鸟》弹弓实现的技能培训
查看>>
重点掌握HTTP协议
查看>>
软件公司 之 老马与新马
查看>>
golang 并发二(调度)
查看>>
Scala的bounds
查看>>
Zookeeper之——关于Zookeeper的那些事
查看>>