211. 添加与搜索单词 - 数据结构设计

211. 添加与搜索单词 - 数据结构设计

class WordDictionary {
public:
    struct Node{
        Node *node[26];
        bool is_end;
        Node()
        {
            is_end=false;
            for(int i=0;i< 26;i++)
            {
                node[i]=NULL;
            }
        }
    };
    Node *root;
    WordDictionary() {
        root =new Node();
    }
    
    void addWord(string word) {
        auto p = root;
        for(auto  c : word)
        {
            int i = c -'a';
            if(!p->node[i]) p->node[i] =new Node();
            p=p->node[i];
        }
        p->is_end =true;
    }
    
    bool search(string word) {
        return dfs(root,word,0);
    }
    bool dfs(Node * root ,string & s ,int i)
    {
        if(i == s.size()) return root->is_end;
        if(s[i]!='.')
        {
            int n = s[i] - 'a';
            if(!root->node[n]) return false;
            return dfs(root ->node[n] , s, 1+i);
        }else
        {
            for(int j=0 ;j < 26;j++)
            {
                if(root->node[j] &&dfs(root ->node[j] , s, 1+i)) 
                    return true;
            }
            return false;
        }

    }
};

/**
 * Your WordDictionary object will be instantiated and called as such:
 * WordDictionary* obj = new WordDictionary();
 * obj->addWord(word);
 * bool param_2 = obj->search(word);
 */

你可能感兴趣的:(每日一题,数据结构,c#,开发语言)