[leetcode] 211.Add and Search Word - Data structure design
来源:互联网 发布:西班牙语同声传译软件 编辑:程序博客网 时间:2024/05/19 12:15
[题目:
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
题意:
设置数据结构,可以存放字符串,可以查询某个字符串是否存储过。并且支持通配符,’.’可以代表任意一个字符。
思路:
这道题仍旧使用trie树来存放节点。只是在搜索时由于通配符可以适配任一个字符,所以需要采用回溯的方法。匹配到当前字符时,如果遇到’.’,那么就找任一个子孩子,尝试继续寻找下去。
以上。
代码如下:
struct TrieNode { char c; bool leaf; TrieNode* children[26]; TrieNode(char cc):c(cc),leaf(false) { memset(children, 0, sizeof(children)); } TrieNode():leaf(false) { memset(children, 0, sizeof(children)); }};class WordDictionary {public: WordDictionary() { root = new TrieNode(); } // Adds a word into the data structure. void addWord(string word) { if(word.empty())return; TrieNode* tmp = root; for(auto i : word) { if(tmp->children[i - 'a'] == NULL) { TrieNode * node = new TrieNode(i); tmp->children[i - 'a'] = node; } tmp = tmp->children[i - 'a']; } tmp->leaf = true; } // 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(word.size() == 0)return false; search(word, 0, root); } bool search(string& word, int index, TrieNode* node) { if(index == word.size())return node->leaf; if(word[index] != '.') { TrieNode* tmp = node->children[word[index] - 'a']; if(tmp == NULL)return false; else return search(word, index + 1, tmp); } else { for(int i = 0; i < 26; i++) { TrieNode* tmp = node->children[i]; if(tmp != NULL) { if(search(word, index + 1, tmp))return true; } } return false; } }private: TrieNode* root;};// Your WordDictionary object will be instantiated and called as such:// WordDictionary wordDictionary;// wordDictionary.addWord("word");// wordDictionary.search("pattern");
0 0
- [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 @python
- Leetcode 211. Add and Search Word - Data structure design
- 211. Add and Search Word - Data structure design LeetCode
- 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
- 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
- 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
- 在keil中观察STM32产生的PWM 用示波器观察实质频率与仿真不符 是计算值的10倍(疑惑中。。。)
- 2015072706 - 美日
- 7 Reverse Integer
- Android的网络请求库----Android-Async-Http
- BLE in Linux : Set a Simple Peripheral
- [leetcode] 211.Add and Search Word - Data structure design
- 多态学习日志
- 2015072707 - 人性本恶
- 四层和七层负载均衡
- css hack for ie
- iOS中的MVC模式
- UVa 311 - Packets
- 杭电acm阶段之理工大版
- 初学者之php基础(二)