Lintcode---单词的添加与查找
设计一个包含下面两个操作的数据结构:addWord(word), search(word)
addWord(word)会在数据结构中添加一个单词。而search(word)则支持普通的单词查询或是只包含.和a-z的简易正则表达式的查询。
一个 . 可以代表一个任何的字母。
注意事项
你可以假设所有的单词都只包含小写字母 a-z。
addWord("bad")
addWord("dad")
addWord("mad")
search("pad") // return false
search("bad") // return true
search(".ad") // return true
search("b..") // return true
思路:先定义字典树节点类,用以实现字典树;
添加单词过程和之前的过程一模一样,在查找的时候,过程也类似,但要对‘.’字符进行特殊处理,这是问题的关键;
因为字符为'.'的时候,一个 . 可以代表一个任何的字母,在这种情况下,使用递归比较好实现。
/*
思路:先定义字典树节点类,用以实现字典树; 添加单词过程和之前的过程一模一样,在查找的时候,过程也类似,但要对‘.’字符进行特殊处理,这是问题的关键; 因为字符为'.'的时候,一个 . 可以代表一个任何的字母,在这种情况下,使用递归比较好实现。 */ //节点类的定义,注意构造函数对所有数据成员都进行初始化; const int MAX_CHILD=26;
class TrieNode {
public:
// Initialize your data structure here.
int count;
TrieNode* child[MAX_CHILD];
TrieNode() {
for(int i = 0; i < 26; i++)
child[i] = NULL;
count=0;
}
}; class WordDictionary {
public: WordDictionary() {
root = new TrieNode();
} // Adds a word into the data structure.
//添加单词过程和插入过程一模一样
void addWord(string word) {
// Write your code here if(root==NULL||word.size()==0){
return;
} int len=word.size();
TrieNode* t=root;
int i=0; while(i<len){
if(t->child[word[i]-'a']==NULL){
TrieNode* temp=new TrieNode();
t->child[word[i]-'a']=temp;
t=t->child[word[i]-'a'];
}
else{
t=t->child[word[i]-'a'];
}
i++;
}
t->count=1;
} // 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) {
// Write your code here
search(word, root, 0);
} bool search(string &word, TrieNode *p, int i){
if (i == word.size()){
return p->count;
} //当遇到字符为'.'的时候,一个 . 可以代表一个任何的字母;
//这里用递归的方式判断输入字符串是否存在; if (word[i] == '.') {
for (auto a : p->child) {
if (a && search(word, a, i + 1)){
return true;
}
}
return false;
}
else {
return p->child[word[i] - 'a'] && search(word, p->child[word[i] - 'a'], i + 1);
}
} private:
TrieNode *root;
}; // Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
Lintcode---单词的添加与查找的更多相关文章
- 单词的添加与查找 · Add and Search Word
[抄题]: 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则支持普通的单词 ...
- lintcode-473-单词的添加与查找
473-单词的添加与查找 设计一个包含下面两个操作的数据结构:addWord(word), search(word) addWord(word)会在数据结构中添加一个单词.而search(word)则 ...
- python实现将字符串中以大写字母开头的单词前面添加“_”下划线
在工作中写测试用例代码生成的时候,函数命令考虑采用参数文件的名称来命名,但是发现文件命名是驼峰的写写法,所以想按照字符串中的大写字母做分割,每个单词前面添加下划线,主要考虑采用正则的模式来匹配,替换然 ...
- 关于eclipse添加自动查找文件以及svn的插件
1.添加自动查找当前文件位置的插件(如下图) 在百度搜索下载 OpenExplorer_1.5.0.v201108051313.jar,下载之后放入eclipse下面的plugin文件夹下面既可以 2 ...
- [LintCode] Add and Search Word 添加和查找单词
Design a data structure that supports the following two operations: addWord(word) and search(word) s ...
- [LeetCode] Add and Search Word - Data structure design 添加和查找单词-数据结构设计
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- [LeetCode] 211. Add and Search Word - Data structure design 添加和查找单词-数据结构设计
Design a data structure that supports the following two operations: void addWord(word) bool search(w ...
- lintcode:单词切分
单词切分 给出一个字符串s和一个词典,判断字符串s是否可以被空格切分成一个或多个出现在字典中的单词. 样例 s = "lintcode" dict = ["lint&qu ...
- 使用JAVA编写电话薄程序,具备添加,查找,删除等功能
//该程序需要连接数据库.根据word文档要求所有功能均已实现.//大部分方法基本差不多,//在查询修改的时候能输出 最大ID号 和最小ID号,并且可以对输入的ID号进行判断是否存在(具体方法请查看 ...
随机推荐
- 20172333 2017-2018-2 《Java程序设计》第2周学习总结
20172333 2016-2017-2 <Java程序设计>第2周学习总结 教材学习内容总结 1.了解print与println的用法区别. 2.有关于"+"的基本用 ...
- codevs 3641 上帝选人
3641 上帝选人 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 世界上的人都有智商IQ和情商EQ.我们用两个数字来表示人的 ...
- centos svnversion安装部署
第一步: yum install subversion; 第二步: mkdir /data/svn/conf mkdir /data/svn/library 第三步: svnadmin create ...
- mysql-proxy使用中的问题
Auth: Jin 1.session问题 Date: 20140328问题描述:基于openx 的广告系统,将数据从单点,迁移到mmm集群,前端无法访问报错信息如下:MDB2 Error: Arra ...
- sourceinsight常用快捷键
Alt+l 激活语法窗口 ,搜索语法(当前打开文件的函数.宏定义搜索输入区域), Alt+, Alt+. 分别表示后退工作区.前进工作区 shift+F5 标记一个单词 shift ...
- 一日一点RakNet(3)--介绍
介绍 安装 请参考Compiler Setup页,有什么问题在这块有解答.如果有额外的问题参考FAQ,http://www.jenkinssoftware.com,或者邮件联系我们.高级用户可以直接跳 ...
- Unity-EasyTouch插件之Two Finger
今天,我们来学习下多手指触摸屏幕的事件,分别有挤压(缩放),挤压(旋转) 挤压(缩放): 在easytouch中,双手指挤压缩放的英文为Pinch 好了今天我们的测试是双手指挤压对物体进行缩放.我们测 ...
- [转]SSIS error DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER when connecting to Oracle data source
本文转自:http://blogs.msdn.com/b/jorgepc/archive/2008/02/12/ssis-error-dts-e-cannotacquireconnectionfrom ...
- python微信公众号开发学习记录
网上有很多微信公众号的开发教程,但是都是好几年前的了,而且很多都是抄袭其他人的,内容几乎一模一样.真的无语了.只好自己总结一下开发的一些简单流程. 一先去注册个微信公众号,这个就不详细说了, 二登录后 ...
- 非意外的PDB错误 OK(0)
用ib编项目会出现这个error 用vs重新编译全部 就没有问题 ib的设置改下 Visual Studio Builds--Advanced --PDB File Allocation Force ...