Steward
分享是一種喜悅、更是一種幸福
程式語言 - LeetCode - C++ - 211. Design Add and Search Words Data Structure
題目:

解答:
class WordDictionary {
private:
struct TrieNode {
bool is_end;
TrieNode *child[26];
TrieNode() {
is_end = false;
for (int i = 0; i < 26; ++i) {
child[i] = nullptr;
}
}
};
TrieNode* root;
public:
WordDictionary() {
root = new TrieNode();
}
void addWord(string word) {
TrieNode *n = root;
for (char ch : word) {
if (!n->child[ch - 'a']) {
n->child[ch - 'a'] = new TrieNode();
}
n = n->child[ch - 'a'];
}
n->is_end = true;
}
bool search(string word) {
return dfs(word, 0, root);
}
bool dfs(string& word, int i, TrieNode *n) {
if (!n) {
return false;
}
if (i == word.size()) {
return n->is_end;
}
char ch = word[i];
if (ch == '.') {
for (int j = 0; j < 26; j++) {
if (dfs(word, i + 1, n->child[j])) {
return true;
}
}
}
else {
return dfs(word, i + 1, n->child[ch - 'a']);
}
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);
*/