leetcode 211: Add and Search Word - Data Structure Design

来源:互联网 发布:四川旅游学院教务网络 编辑:程序博客网 时间:2024/06/06 13:17

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");


0 0
原创粉丝点击