您的位置:首页 > 编程语言 > C语言/C++

[leetcode] Add and Search Word - Data structure design

2015-05-23 17:46 441 查看
字典树,代码如下:

class TrieNode {
public:
// Initialize your data structure here.
TrieNode() {
for(int i = 0; i < 26; ++i)
next[i] = NULL;
end = false;
}
void insert(string s){
if(s.empty()){
end = true;
return;
}
if(next[s[0] - 'a'] == NULL)
next[s[0] - 'a'] = new TrieNode();
next[s[0] - 'a']->insert(s.substr(1));
}
bool search(string key){
if(key.empty())
return end;
if(key[0] == '.'){
for(int i = 0; i < 26; ++i)
if(next[i] != NULL && next[i]->search(key.substr(1)))
return true;
return false;
}
if(next[key[0] - 'a'] == NULL)
return false;
return next[key[0] - 'a']->search(key.substr(1));
}
bool startsWith(string prefix){
if(prefix.empty())
return true;
if(next[prefix[0] - 'a'] == NULL)
return false;
return next[prefix[0] - 'a']->startsWith(prefix.substr(1));
}
private:
TrieNode *next[26];
bool end;
};

class WordDictionary {
public:

WordDictionary(){
root = new TrieNode();
}

// Adds a word into the data structure.
void addWord(string word) {
root->insert(word);
}

// 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 root->search(word);
}
private:
TrieNode* root;
};

// Your WordDictionary object will be instantiated and called as such:
// WordDictionary wordDictionary;
// wordDictionary.addWord("word");
// wordDictionary.search("pattern");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 c++ leetcode