leetcode 211: Add and Search Word - Data Structure Design
2015-08-27 12:02
621 查看
Use the method in Implement Trie, and modify the search function into the DFS method to check '.' character.
struct DictNode {
char c;
bool isword;
unordered_map<char,DictNode*> next;
DictNode() {
}
DictNode(char _c) {
c=_c;
isword=0;
}
};
class WordDictionary {
public:
WordDictionary() {
root=new DictNode();
}
// Adds a word into the data structure.
void addWord(string word) {
int len=word.length();
DictNode *curr=root;
for(int i=0;i<len;i++)
{
if(curr->next.find(word[i])!=curr->next.end())
curr=curr->next[word[i]];
else
{
DictNode *temp=new DictNode(word[i]);
curr->next.insert(make_pair(word[i],temp));
curr=temp;
}
}
curr->isword=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) {
return search_helper(word,root);
}
bool search_helper(string word,DictNode *p) {
if(word.empty())
return p->isword;
if(word[0]=='.')
{
unordered_map<char,DictNode*>::iterator it;
for(it=p->next.begin();it!=p->next.end();it++)
if(search_helper(word.substr(1),it->second))
return 1;
return 0;
}
if(p->next.find(word[0])==p->next.end())
return 0;
return search_helper(word.substr(1),p->next[word[0]]);
}
private:
DictNode *root;
};
// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
struct DictNode {
char c;
bool isword;
unordered_map<char,DictNode*> next;
DictNode() {
}
DictNode(char _c) {
c=_c;
isword=0;
}
};
class WordDictionary {
public:
WordDictionary() {
root=new DictNode();
}
// Adds a word into the data structure.
void addWord(string word) {
int len=word.length();
DictNode *curr=root;
for(int i=0;i<len;i++)
{
if(curr->next.find(word[i])!=curr->next.end())
curr=curr->next[word[i]];
else
{
DictNode *temp=new DictNode(word[i]);
curr->next.insert(make_pair(word[i],temp));
curr=temp;
}
}
curr->isword=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) {
return search_helper(word,root);
}
bool search_helper(string word,DictNode *p) {
if(word.empty())
return p->isword;
if(word[0]=='.')
{
unordered_map<char,DictNode*>::iterator it;
for(it=p->next.begin();it!=p->next.end();it++)
if(search_helper(word.substr(1),it->second))
return 1;
return 0;
}
if(p->next.find(word[0])==p->next.end())
return 0;
return search_helper(word.substr(1),p->next[word[0]]);
}
private:
DictNode *root;
};
// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
相关文章推荐
- Struts2笔记——通配符和动态方法调用
- Struts2笔记——通配符和动态方法调用
- SSIS 参数与环境
- 面试题:查询连续出现的数字
- openWRT学习笔记
- Amazon online assessment OA two sum (check how many 多少对)
- 关于Python中,re.sub(pattern, repl, string, count=0, flags=0)方法的个人理解
- uva 12296 - Pieces and Discs(多边形切割)
- 在申通沃德公司的实习经历及感悟(二)
- mysql之锁表机制与死锁浅谈
- File upload example in RESTEasy
- IOS本地化应用程序
- 云南省昆明市下肢残疾人有望免费坐地铁
- 最老程序员创业开发实训3---采用MVC架构的应用Splash页面实现
- 行为树(Behavior Tree)实践(1)– 基本概念
- Linux网络编程--IP地址与域名解析(DNS)
- Struts2笔记——类型转换
- 入栈出栈序列问题
- [Andorid] inflate使用 以及 UI线程安全问题
- Python中的map(function,iterable, ...)方法