211. Add and Search Word - Data structure design LeetCode

来源:互联网 发布:淘宝hd登录失败api 编辑:程序博客网 时间:2024/05/27 09:47

题意:设计一种数据结构,能插入单词,然后查询单词,查询支持模糊查询,.代表一个任何字母。
题解:用trie树存,查找的时候遇到.就递归的去查。

class TrieNode{public:    bool isword;    char var;    TrieNode* children[26];    TrieNode()    {        var = 0;        isword = false;        memset(children,0x0,sizeof(children));    }    TrieNode(char c)    {        var = c;        isword = false;        memset(children,0x0,sizeof(children));    }};class WordDictionary {public:    WordDictionary()    {        root = new TrieNode();    }    // Adds a word into the data structure.    void addWord(string word) {        TrieNode* tmp = root;        int n = word.length();        for(int i = 0; i < n; i++)        {            char c = word[i];            if(tmp->children[c - 'a'] == 0)            {                TrieNode* x = new TrieNode(c);                tmp->children[c - 'a'] = x;            }            tmp = tmp->children[c - 'a'];        }        tmp->isword = true;    }    // Returns if the word is in the data structure. A word could    // contain the dot character '.' to represent any one letter.    bool search(TrieNode* head,string word)    {        if(word.length() == 1)        {            if(word[0] == '.')            {                bool flag = false;                for(int i = 0; i < 26;i++)                    if(head->children[i] != 0)                        flag |= head->children[i]->isword;                return flag;            }            else            {                if(head->children[word[0] - 'a'] != 0 && head->children[word[0] - 'a']->isword)                    return true;                else                     return false;            }        }        if(word[0] == '.')        {            bool flag = false;            for(int i = 0; i < 26;i++)                if(head->children[i] != 0)                    flag |= search(head->children[i],word.substr(1));            return flag;        }        else        {            if(head->children[word[0] - 'a'] == 0)                return false;            else                 return search(head->children[word[0] - 'a'],word.substr(1));        }    }    bool search(string word) {        return search(root,word);    }private:    TrieNode* root = new TrieNode();};
0 0
原创粉丝点击