[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");
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");
相关文章推荐
- LeetCode 211 Add and Search Word - Data structure design(字典树)
- LeetCode 211 Add and Search Word - Data structure design
- leetcode Add and Search Word - Data structure design
- LeetCode Add and Search Word - Data structure design Trie
- LeetCode 211. Add and Search Word - Data structure design
- 《leetCode》:Add and Search Word - Data structure design
- leetcode Add and Search Word - Data structure design
- LeetCode-211.Add and Search Word - Data structure design
- Leetcode173: Add and Search Word - Data structure design
- LeetCode *** 211. Add and Search Word - Data structure design(字典树)
- [leetcode]Add and Search Word - Data structure design
- LeetCode: Add and Search Word - Data structure design
- leetCode_Add and Search Word - Data structure design
- 【LeetCode】211. Add and Search Word - Data structure design 解题报告(Python)
- leetcode--Add and Search Word - Data structure design
- LeetCode208 Implement Trie (Prefix Tree). LeetCode211 Add and Search Word - Data structure design
- leetcode Add and Search Word - Data structure design
- LeetCode 211 - Add and Search Word - Data structure design
- leetcode 211. Add and Search Word - Data structure design
- LeetCode Add and Search Word - Data structure design