leetcode 211 【Trie】

来源:互联网 发布:淘宝客服时间怎么设置 编辑:程序博客网 时间:2024/04/29 11:16

简单trie树应用,在查询的时候如果碰到 '.'的情况,就搜索所有相连的字母,继续查找,只要基于这些相连的字母的查找有一个是有效的,那么就返回true.

class WordDictionary {public:    class node    {    public:        int have;        node *next[26];        node(){have=0;for(int i=0;i<26;i++) next[i]=NULL;}    };    node *root=new node();    // Adds a word into the data structure.    void addWord(string word) {        node *p=root;        for(int i=0;i<word.size();i++)        {            int j=word[i]-'a';            if(p->next[j]==NULL) p->next[j]=new node();            p=p->next[j];        }        p->have=1;    }        // Returns if the word is in the data structure. A word could    // contain the dot character '.' to represent any one letter.    bool dfs(int x,string word,node *tmp)    {        if(x>=word.size())  return (tmp->have)?true:false;        if(tmp==NULL) return false;        int flag=0;        if(word[x]=='.')        {            int j;            for(int i=0;i<26;i++)            {                if(tmp->next[i]) {j=dfs(x+1,word,tmp->next[i]);if(j) flag=1;}            }            return flag;        }        else        {            int k=word[x]-'a';            if(tmp->next[k]==NULL) return false;            return dfs(x+1,word,tmp->next[k]);        }    }    bool search(string word) {        node *p=root;        return dfs(0,word,root);    }};


0 0