Trie树使用

来源:互联网 发布:赵薇资本控制舆论知乎 编辑:程序博客网 时间:2024/06/08 11:35

leetcode题目:https://leetcode.com/problems/add-and-search-word-data-structure-design/

Add and Search Word - Data structure design

Design a data structure that supports the following two operations:

void addWord(word)bool search(word)

search(word) can search a literal word or a regular expression string containing only letters a-z or .. A . means it can represent any one letter.

For example:

addWord("bad")addWord("dad")addWord("mad")search("pad") -> falsesearch("bad") -> truesearch(".ad") -> truesearch("b..") -> true

Note:
You may assume that all words are consist of lowercase letters a-z

解:

struct MyTrie{//trie树的数据结构    vector<MyTrie*> child;    bool isWord;    MyTrie():isWord(false),child(vector<MyTrie*>(26, NULL)){}};class WordDictionary {public:    MyTrie * root;    unordered_set<string> mm;    WordDictionary():root(new MyTrie()){}    // Adds a word into the data structure.    void addWord(string word) {        MyTrie * cur=root;        for(int i=0; i<word.size(); i++){            int idx=word[i]-'a';            if(cur->child[idx]==NULL)                 cur->child[idx]=new MyTrie();            cur=cur->child[idx];        }        cur->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(string word) {        return searchData(word.c_str(), root);    }        bool searchData(const char * c, MyTrie * cur){//单词的查找        if(cur==NULL)   return false;        if(*c=='\0') return cur->isWord;        if(*c!='.')            return searchData(c+1, cur->child[*c-'a']);        else{            for(int i=0; i<26; i++){                if(searchData(c+1, cur->child[i]))                    return true;            }        }        return false;    }    };// Your WordDictionary object will be instantiated and called as such:// WordDictionary wordDictionary;// wordDictionary.addWord("word");// wordDictionary.search("pattern");






0 0
原创粉丝点击