leetcode 211. Add and Search Word - Data structure design
Posted いいえ敗者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 211. Add and Search Word - Data structure design相关的知识,希望对你有一定的参考价值。
Design a data structure that supports the following two operations:
void addWord(word) bool search(word)
search(word) can search a literal word or a regular expression string containing only letters a-z
or .
. A .
means it can represent any one letter.
For example:
addWord("bad") addWord("dad") addWord("mad") search("pad") -> false search("bad") -> true search(".ad") -> true search("b..") -> true
Note:
You may assume that all words are consist of lowercase letters a-z
.
字典树+dfs时间复杂度 查询的时候复杂度O(26^n) n为‘.’的个数
class WordDictionary { public: /** Initialize your data structure here. */ WordDictionary() { } class node { public: node* next[26]; int end; node() { for (int i = 0; i < 26; ++i) { next[i] = nullptr; } end = 0; } }; class Trie { public: node* root; Trie() { root = new node(); } void add(string s) { if (s.size() == 0) return ; node* p = root; for (int i = 0; i < s.size(); ++i) { int x = s[i] - ‘a‘; if (p->next[x] == nullptr) { p->next[x] = new node(); p = p->next[x]; } else { p = p->next[x]; } } p->end = 1; } bool search(string& s, int pos, node *p) { if (s.size() == pos && p->end == 1) { return true; } if (s[pos] == ‘.‘) { for (int j = 0; j < 26; ++j) { if (p->next[j] != nullptr) { if (search(s, pos + 1, p->next[j])) return true; } } } else { int x = (int)(s[pos] - ‘a‘); if (x >= 0 && x < 26 && p->next[x] != nullptr && search(s, pos + 1, p->next[x])) return true; } return false; } }; /** Adds a word into the data structure. */ void addWord(string word) { ac.add(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) { if (ac.search(word, 0, ac.root)) return true; return false; } private: Trie ac; }; /** * Your WordDictionary object will be instantiated and called as such: * WordDictionary obj = new WordDictionary(); * obj.addWord(word); * bool param_2 = obj.search(word); */
以上是关于leetcode 211. 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 211: Add and Search Word - Data structure design
[LeetCode] 211. Add and Search Word - Data structure design Java
[leetcode trie]211. Add and Search Word - Data structure design
LeetCode 211. Add and Search Word - Data structure design(字典树)