您的位置:首页 > 其它

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");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: